[Haskell-beginners] From Functional Dependencies to Type Families

Daniel Fischer daniel.is.fischer at web.de
Thu Dec 3 14:13:18 EST 2009


Am Donnerstag 03 Dezember 2009 19:51:31 schrieb builes.adolfo at googlemail.com:
> > You need to tell the compiler explicitly that a and Build r should be the
> > same type.
>
> Thanks Daniel :). That was the trick .
>
> It's the first time that I see "~", is that from -XUndecidableInstances ? .

No, it's part of the TypeFamilies extension.

http://www.haskell.org/haskellwiki/GHC/Type_families#Equality_constraints

and http://www.haskell.org/ghc/docs/latest/html/users_guide/type-families.html (much 
overlap).

It requires UndecidableInstances ( 
http://www.haskell.org/ghc/docs/latest/html/users_guide/type-class-
extensions.html#undecidable-instances ) because both type variables from the instance head 
appear in the constraints, so the compiler can't prove that type inference will terminate. 
You tell it that you think it will terminate, and it goes forth.

Which reminds me:

 > {-# OPTIONS -fglasgow-exts #-}

is deprecated. Use LANGUAGE pragmas, in this case

{-# LANGUAGE TypeFamilies, UndecidableInstances #-}

({-# LANGUAGE MultiParamTypeClasses, FunctionalDependencies #-} for the FunDep version).


More information about the Beginners mailing list