packages feed

MicroHs-0.15.0.0: lib/Control/Concurrent/STM/Internal/Set.hs

module Control.Concurrent.STM.Internal.Set(
  Set,
  empty,
  member,
  insert,
  delete,
  elems,
  union,
  (\\),
  ) where
import Prelude hiding(union)
import qualified Data.List

newtype Set a = Set [a]

empty :: Set a
empty = Set []

member :: Ord a => a -> Set a -> Bool
member a (Set s) = a `elem` s

insert :: Ord a => a -> Set a -> Set a
insert a s = Set [a] `union` s

delete :: Ord a => a -> Set a -> Set a
delete a (Set s) = Set (filter (a /=) s)

elems :: Ord a => Set a -> [a]
elems (Set s) = Data.List.sort s

union :: Ord a => Set a -> Set a -> Set a
union (Set s1) (Set s2) = Set (s1 `Data.List.union` s2)

(\\) :: Ord a => Set a -> Set a -> Set a
Set s1 \\ Set s2 = Set (s1 Data.List.\\ s2)