In Data.Typeable there is a function cast
cast :: forall a b. (Typeable a, Typeable b) => a -> Maybe b
and a function eqT
eqT :: forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
They seem to be nearly identical in effect and implementation, I was wondering if there is any practical import to the description of eqT: extract a witness of equality of two types.