[Haskell-beginners] From Functional Dependencies to Type Families

Stephen Tetley stephen.tetley at gmail.com
Thu Dec 3 04:38:48 EST 2009


Hi Adolfo

This is quite a tricky one and I haven't got a proper answer
(hopefully someone will come along with one soon). But I've
an initial observation:

Longhand (i.e. without the type class - but relying on previously
defined instances) the type family version of buildlist on functions
is:


buildList_fun l x = \y -> build' (x:l) y

Asking for the type at the GHCi prompt gives:

buildList_fun
  :: (BuildList r) => [Build r] -> Build r -> Build r -> r


Whereas for the fun dep version

build_fun l x y = build' (x:l) y


The type is:

build_fun :: (BuildList a r) => [a] -> a -> a -> r

Crucially the last part of the type is r.

Why you can't type your TF version seems to be because the answer type
of the continuation is fixed to a not r.
(the fun dep version is also a multi parameter class so you are
allowed a different answer type).

[I'm calling out to the gallery for help at this point!].


Best wishes

Stephen


More information about the Beginners mailing list