[Haskell-cafe] Functional Dependencies and multiparameter typeclasses

Miguel Mitrofanov miguelimo38 at yandex.ru
Mon Aug 24 07:29:46 EDT 2009

> However, I do not really understand the cause of the original problem. Why
> do I need the functional dependency to make this work ?

Suppose you have an instance:

instance Pixel MyPixel where...
instance Image MyImage MyPixel where
   width i = countPixels i

And somebody (not necessarily you) makes another instance:

instance Pixel CustomPixel where...
instance Image MyImage CustomPixel where
   width i = 0

Now, take any image

im :: MyImage

Then you'd expect that

width im :: Int

But now there are TWO implementations of "width :: MyImage -> Int" and 
no way for compiler to figure out which one to use.

GHC sort of foresees this problem. By adding a functional dependency you 
instruct it to forbid the second declaration, when the first one is 
present, thus removing the problem.

More information about the Haskell-Cafe mailing list