
3 Jun
2011
3 Jun
'11
9:55 a.m.
On Fri, 03 Jun 2011 16:04:05 +0300, Guy
I have some code resembling
class Foo f where foo :: a -> f a
data Bar f a = Foo f => Bar {bar :: f a}
instance Foo (Bar f) where foo a = Bar $ foo a
GHC insists on Foo f => in the instance declaration. However, the definition of Bar guarantees that this will always be the case. Why do I have to state this explicitly?
The constraints in the data type declaration only affect the constructors. It's a known issue, unfortunately there doesn't seem to be a way around it. See also: http://www.haskell.org/haskellwiki/Data_declaration_with_constraint Cheers, Daniel