[Haskell-cafe] checking types with type families

Simon Peyton-Jones simonpj at microsoft.com
Thu Jul 1 13:54:11 EDT 2010


|  Well, from looking at the documentation, it looks like I could maybe
|  use a type family if I could write:
|  
|  class (DerivedOf a ~ derived) => Typecheck a derived where
|   ...

That's the right idiom yes. But see my message of a few minutes ago...  It's neater still to remove the 'derived' parameter altogether, which you can do with uni-directional fundeps. Thus instead of
	class Typecheck a derived where
	  op :: a -> derived
you have
	class Typecheck a where
	  type Derived a
	  op :: a -> Derived a

|  Presumably then I could combine functions 'Typecheck a derived'
|  constraints without getting lots of "Could not deduce (Typecheck a
|  derived3) from the context (Typecheck a derived13)" errors.  I'm only
|  guessing though, because it looks like it's not implemented yet as of
|  6.12.3.

Correct.  These equality superclasses will work in 6.14 and (in a few weeks) in the HEAD, but not in 6.12. 

But you may not need them if you have unidirectional fundeps.

Simon


More information about the Haskell-Cafe mailing list