Hello! I'm trying to have a class for booleans called Boolean (the methods are not complete):

class MyEq a where

(===) :: (Boolean b) => a -> a -> b

class (MyEq a) => Boolean a where

(/\) :: a -> a -> a

instance MyEq Bool where

x === y = x==y

instance Boolean Bool where

(/\) = (&&)

However, to make Bool an instance of Boolean I need to make it an instance of MyEq first, which I can't, because to define === I need Bool to be in Boolean. Indeed the code above give the error:

Could not deduce (b ~ Bool)

from the context (Boolean b)

bound by the type signature for

=== :: Boolean b => Bool -> Bool -> b

at 1.hs:8:5-18

`b' is a rigid type variable bound by

the type signature for === :: Boolean b => Bool -> Bool -> b

at 1.hs:8:5

In the expression: x == y

In an equation for `===': x === y = x == y

In the instance declaration for `MyEq Bool'

Failed, modules loaded: none.

How can I overcome the issue?

_______________________________________________

Haskell-Cafe mailing list

[hidden email]
http://www.haskell.org/mailman/listinfo/haskell-cafe