
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