In article <[EMAIL PROTECTED]>, "Frank" <[EMAIL PROTECTED]> wrote:
> 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 _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe