defining (-> Bool) as a set

Pixel pixel@mandrakesoft.com
23 Apr 2002 01:36:25 +0200


Hal Daume III <hdaume@ISI.EDU> writes:

> I'd like to be able to define something like
> 
> instance Eq a => Coll (-> Bool) a where
>   empty    = \_ -> False
>   single x = \y -> if x == y then True else False
>   union a b = \x -> a x || b x
>   insert s x = \y -> x == y || s y

I don't know what Coll is, but the following is working:

class Collection e ce | ce -> e where
    empty :: ce
    insert :: e -> ce -> ce
    member :: e -> ce -> Bool

instance Eq a => Collection a (a -> Bool) where
    empty = (\x -> False)
    insert e f = (\x -> if x == e then True else f x)
    member e f = f e