1 implementation module StdSet
8 toSet :: [a] -> Set a | Eq a
12 toSet` [x:xs] s = toSet` xs (join x s)
14 join :: a (Set a) -> Set a | Eq a
17 | otherwise = s ++ [e]
19 fromSet :: (Set a) -> [a]
22 isEmptySet :: (Set a) -> Bool
26 isDisjoint :: (Set a) (Set a) -> Bool | Eq a
27 isDisjoint s1 s2 = length (intersection s1 s2) == 0
29 isSubset :: (Set a) (Set a) -> Bool | Eq a
30 isSubset s1 s2 = nrOfElements (intersection s1 s2) == nrOfElements s1
32 isStrictSubset :: (Set a) (Set a) -> Bool | Eq a
33 isStrictSubset s1 s2 = isSubset s1 s2 && s1 <> s2
35 memberOfSet :: a (Set a) -> Bool | Eq a
36 memberOfSet e [] = False
39 | otherwise = memberOfSet e xs
41 union :: (Set a) (Set a) -> Set a | Eq a
42 union s1 s2 = toSet (s1 ++ s2)
44 intersection :: (Set a) (Set a) -> Set a | Eq a
45 intersection s1 s2 = [e \\ e <- s1 | memberOfSet e s2]
47 nrOfElements :: (Set a) -> Int
48 nrOfElements s = length (fromSet s)
50 without :: (Set a) (Set a) -> Set a | Eq a
51 without s1 s2 = [e \\ e <- s1 | (memberOfSet e s2) == False]
53 product :: (Set a) (Set b) -> Set (a,b)
54 product s1 s2 = [(e1,e2) \\ e1 <- s1, e2 <- s2]
59 instance == (Set a) | Eq a
60 where (==) s1 s2 = isSubset s1 s2 && isSubset s2 s1
62 powerSet :: (Set a) -> Set (Set a)
64 powerSet [e:es] = map ((++) [e]) (powerSet es) ++ powerSet es