>У нас есть значение типа a, с ним в нужные функции передаётся instance Typeable a, как из этого инстанса достать информацию, шоп скастовать это значение к типу b?
Примерно так:
{-# LANGUAGE ScopedTypeVariables #-}
import Data.Typeable
import Unsafe.Coerce
mycast :: forall a b . (Typeable a, Typeable b) => a -> Maybe b
mycast x
| typeOf x == typeOf (undefined :: b) = Just (unsafeCoerce x)
| otherwise = Nothing
no subject
Примерно так: