Our implementation of sets (key property: no duplicates) is just a variant of the FiniteMap module.
data Set -- abstract -- instance of: Eq emptySet :: Set a mkSet :: Ord a => [a] -> Set a setToList :: Set a -> [a] unitSet :: a -> Set a union :: Ord a => Set a -> Set a -> Set a unionManySets :: Ord a => [Set a] -> Set a minusSet :: Ord a => Set a -> Set a -> Set a mapSet :: Ord a => (b -> a) -> Set b -> Set a intersect :: Ord a => Set a -> Set a -> Set a addToSet :: Ord a => Set a -> a -> Set a delFromSet :: Ord a => Set a -> a -> Set a elementOf :: Ord a => a -> Set a -> Bool isEmptySet :: Set a -> Bool cardinality :: Set a -> Int |