Simon thanks I'm afraid I didn't see your earlier reply. I didn't try this in GHC, thanks for the clarification. Hugs on the other hand does give a type: g :: (Foo [[[[a]]]] [[[[b]]]], Foo [[[[[b]]]]] [[[a]]]) => [[[[b]]]] -> [[[a]]] -> Int My assumption is that this is because of a depth bound check. As an editorial aside, it seems to me that the GHC approach of lazy context reduction introduces the same problems that functional dependencies were supposed to solve. The type of g with unresolved constraints hides a type error, and this is part of the motivation for FD given by Mark Jones in his web note. It seems to me that an approach of "I don't know" would be more useful, but I cc to the haskell list in case others have opinions. Cheers --dd