Anil is right about one thing.  This is a design issue.

It is my understanding that the Haskell committee 
made the decision that given a declaration like

        class Foo a => Bar a where ..

every *instance* declaration for Bar would be statically checked  
to ensure that a corresponding instance declaration for
Foo exists that is at least as general. 

Now basically,  a superclass declaration like the above means that
(Bar t) is equivalent to (Bar t, Foo t).  In fact this "shorthand" in building
contexts seems to be its only purpose.  This equivalence can either be
enforced "eagerly" as in Haskell or "lazily" as in Gofer.

What Anil seems to be saying is that he prefers the lazy enforcement
which makes the behavior of superclass contexts in instance
declarations more similar to that of contexts in instance
declarations.

Satish

Reply via email to