@@ -2,8 +2,6 @@ module Data.SortedSet
3import Data.SortedMap
3import Data.SortedMap
5−-- TODO: add intersection, union, difference
8data SortedSet k = SetWrapper (Data.SortedMap.SortedMap k ())
6data SortedSet k = SetWrapper (Data.SortedMap.SortedMap k ())
@@ -31,5 +29,31 @@ export
31toList : SortedSet k -> List k
29toList : SortedSet k -> List k
32toList (SetWrapper m) = map (\(i, _) => i) (Data.SortedMap.toList m)
30toList (SetWrapper m) = map (\(i, _) => i) (Data.SortedMap.toList m)
34−implementation Foldable SortedSet where
32+Foldable SortedSet where
35 foldr f e xs = foldr f e (Data.SortedSet.toList xs)
33 foldr f e xs = foldr f e (Data.SortedSet.toList xs)
35+||| Set union. Inserts all elements of x into y
37+union : (x, y : SortedSet k) -> SortedSet k
38+union x y = foldr insert x y
40+||| Set difference. Delete all elments in y from x
42+difference : (x, y : SortedSet k) -> SortedSet k
43+difference x y = foldr delete x y
45+||| Set symmetric difference. Uses the union of the differences.
47+symDifference : (x, y : SortedSet k) -> SortedSet k
48+symDifference x y = union (difference x y) (difference y x)
50+||| Set intersection. Implemented as the difference of the union and the symetric difference.
52+intersection : (x, y : SortedSet k) -> SortedSet k
53+intersection x y = difference x (difference x y)
55+Ord k => Semigroup (SortedSet k) where
58+Ord k => Monoid (SortedSet k) where