Our implementation of sets (key property: no duplicates) is just a variant of the `FiniteMap' module.
mkSet :: Ord a => [a] -> Set a setToList :: Set a -> [a] emptySet :: Set a singletonSet :: a -> Set a union :: Ord a => Set a -> Set a -> Set a unionManySets :: Ord a => [Set a] -> Set a intersect :: Ord a => Set a -> Set a -> Set a minusSet :: Ord a => Set a -> Set a -> Set a mapSet :: Ord a => (b -> a) -> Set b -> Set a elementOf :: Ord a => a -> Set a -> Bool isEmptySet :: Set a -> Bool