Doing exercises from "Haskell tutorial" ...

Dmitry Astapov
02 Oct 2001 15:16:27 +0300

It seems like an appropriate page for aske newbie questions, isnt it?

I was reading through Haskell tutroial
( and trying to do
exercises from there. I'm stuck in the first exercise for "Classes" chapter
(page 11). I need to define SetsAsLists as an instance of Set by supplying
definitions for all Set methods, but definitions I wrote led me to adding
additional constraints on "union" and "memeber" methods. Is it ok or it's
possible to define "union" and "member" without using "==" ?

Code follows:

class Set s where
            empty :: s a
            isEmpty :: s a -> Bool
            singleton :: a -> s a
            union :: Eq a => s a -> s a -> s a
            member :: Eq a => a -> s a -> Bool
            choice :: s a -> (a, s a)

data SetsAsLists a = SL [a]

instance Set SetsAsLists where
    empty = SL []
    isEmpty (SL []) = True
    isEmpty _ = False
    singleton x = SL [x]
    member x (SL ys)  | isEmpty (SL ys)    = False
                      | otherwise          = if x==head ys
                                             then True 
                                             else member x (SL (tail ys))
    union (SL []) (SL ys) = SL ys
    union (SL (x:xs)) (SL ys) | member x (SL ys) = union (SL xs) (SL (x:ys))
                              | otherwise        = union (SL xs) (SL ys)

Dmitry Astapov //ADEpt                               E-mail:
GPG KeyID/fprint: F5D7639D/CA36 E6C4 815D 434D 0498  2B08 7867 4860 F5D7 639D