
3 Jun
2011
3 Jun
'11
10:13 a.m.
On 03/06/2011 16:55, Daniel Schoepe wrote:
On Fri, 03 Jun 2011 16:04:05 +0300, Guy
wrote: 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.
It seems to work for simpler examples. For example, this is OK data X x = Show x => X x s :: X x -> String s (X x) = show x I don't have to add a Show x => type constraint to s.