module Data.EnumIntSet(EnumIntSet, empty, union,
unions, fromList, toList, elems,
member, notMember) where
import Prelude hiding (lookup)
import qualified Data.IntSet as IntSet
import Data.IntSet(IntSet)
import Data.Monoid(Monoid(..))
newtype EnumIntSet k = EnumIntSet { unEnumIntSet :: IntSet }
deriving (Show, Read, Eq, Ord)
inEnumIntSet :: (IntSet -> IntSet) -> EnumIntSet k -> EnumIntSet k'
inEnumIntSet f = EnumIntSet . f . unEnumIntSet
inEnumIntSet2 :: (IntSet -> IntSet -> IntSet) -> EnumIntSet k -> EnumIntSet k' -> EnumIntSet k''
inEnumIntSet2 f = inEnumIntSet . f . unEnumIntSet
instance Monoid (EnumIntSet k) where
mempty = EnumIntSet mempty
mappend = inEnumIntSet2 mappend
empty :: Enum k => EnumIntSet k
empty = mempty
union :: EnumIntSet k -> EnumIntSet k -> EnumIntSet k
union = mappend
unions :: [EnumIntSet k] -> EnumIntSet k
unions = mconcat
fromList :: Enum k => [k] -> EnumIntSet k
fromList = EnumIntSet . IntSet.fromList . map fromEnum
toList :: Enum k => EnumIntSet k -> [k]
toList = map toEnum . IntSet.toList . unEnumIntSet
elems :: Enum k => EnumIntSet k -> [k]
elems = toList
member :: Enum k => k -> EnumIntSet k -> Bool
member k = IntSet.member (fromEnum k) . unEnumIntSet
notMember :: Enum k => k -> EnumIntSet k -> Bool
notMember k = not . member k