I am having trouble making a type system for my EDSL in Haskell. Can someone help? A simplified description of my problem follows.

I have three classes, A, B1, and B2. I want all instances of B1 to be instances of A. I want all instances of B2 to be instances of A. None of the classes have methods.

The following does NOT work, because of a duplicate instance declaration for A:

class A a
class B1 b1
class B2 b2
instance B1 x => A x
instance B2 x => A x  -- duplicate instance, won't compile
data T = T
instance B1 T

The following DOES work, but it requires that I explicitly give instance declarations of A for all instances of B1 and B2:

class A a
class A a => B1 a
class A a => B2 a
data T = T
instance A T  -- I don't want to have to specify this!
instance B1 T

Of course, this is a simplified example. In a complicated type class hierarchy, in a program with many instances of, say B1, having to provide instance declarations for A is laborious.

Is there a way to avoid this? How can I tell Haskell "all instances of B1 are automatically instances of A".

--
Robin Bate Boerop



_______________________________________________
Haskell mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/haskell

Reply via email to