
In article <200508110639.j7B6dSqP004876@mx02.kabsi.at>,
"Frank"
I would like to state that a class Sup is exhaustively broken down in two subclasses Sub1 and Sub2 (meaning, for every instance of Sub1 and every instance of Sub2, the methods in Sup apply).
I try to code this as:
instance Sub1 x => Sup x instance Sub2 x => Sup x
And get the (expected) error message ExhaustiveClass.hs:22:0: Duplicate instance declarations: ExhaustiveClass.hs:22:0: instance (Sub1 x) => Sup x ExhaustiveClass.hs:25:0: instance (Sub2 x) => Sup x (I have allowed overlapping instances, undecidable instances)
Is there another way of achieving this? Any help appreciated!
Andrew
----------------- complete code I tried with: class Sub1 a where op1 :: a -> a
class Sub2 a where op2 :: a -> a -> a
class Sup a where op3 :: a -> Bool
instance Sub1 Int where op1 = id instance Sub2 Float where op2 x y = y
instance Sub1 x => Sup x where op3 _ = True
instance Sub2 x => Sup x where op3 _ = False
Try this: class Sup a where op3 :: a -> Bool class (Sup a) => Sub1 a where op1 :: a -> a class (Sup a) => Sub2 a where op2 :: a -> a -> a instance Sup Int where op3 _ = True instance Sup Float where op3 _ = False instance Sub1 Int where op1 = id instance Sub2 Float where op2 x y = y -- Ashley Yakeley, Seattle WA