Hello,

The HList paper gives a type cast:

   class TypeCast   a b   | a -> b, b->a   where typeCast   :: a -> b
   class TypeCast'  t a b | t a -> b, t b -> a where typeCast'  :: t->a->b
   class TypeCast'' t a b | t a -> b, t b -> a where typeCast'' :: t->a->b
   instance TypeCast'  () a b => TypeCast a b where typeCast x = typeCast' () x
   instance TypeCast'' t a b => TypeCast' t a b where typeCast' = typeCast''
   instance TypeCast'' () a a where typeCast'' _ x  = x

and a type equality check:

   class  TypeEq x y b | x y -> b
   instance TypeEq x x HTrue
   instance TypeCast HFalse b => TypeEq x y b

The type cast succeeds causing its two argument types to be unified,
or simply fails if the arguments are not unifiable. The type equality
always succeeds "returning" HTrue if the arguments are syntactically
equal, and HFalse if the arguments are not syntactically equal; thus
the type equality will return false for two arguments which could be
unified. If I understand correctly, these two classes do not provide a
way to check for unifiability.

Is it possible to write a class which checks to see if two given type
arguments are unifiable?

thanks,
 Jeff
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to