[Haskell-cafe] Can't resolve class dependences (making Boolean class)

Ivan Lazar Miljenovic ivan.miljenovic at gmail.com
Tue Sep 13 15:16:40 CEST 2011

On 13 September 2011 23:04, Grigory Sarnitskiy <sargrigory at ya.ru> wrote:
> 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

This means that === potentially returns _any_ instance of Boolean.

Let's say for example that I define "data MyBool = T | F" and make it
an instance of MyEq and Boolean.

That means that T === F must be able to return either a Bool, MyBool
or any other instance of Boolean that the _caller_ chooses.

If this is what you want, then I suggest that you do something like:

class (MyEq a) => Boolean a where
   (/\) :: a -> a -> a

    fromBool :: Bool -> a

Then the instance becomes:

instance  MyEq Bool where
    x === y = fromBool $ x==y

instance Boolean Bool where
   (/\) = (&&)

   fromBool = id

Ivan Lazar Miljenovic
Ivan.Miljenovic at gmail.com

More information about the Haskell-Cafe mailing list