module Data.IdMap.Static
( module Data.IdMap
, (:.)((:.))
, insert, delete, lookUp
, (!), member, inserts
, setInsert
, setInserts
) where
import qualified Data.IdMap as I
import Data.IdMap hiding
( insert, delete, lookUp
, (!), member, inserts
, setInsert, setInserts
)
import Data.Maybe
import Data.List (foldl')
data k :. x = !(Id k) :. !x
instance Incl2 (:.) where
left2 (i :. x) = left i :. x
right2 (i :. x) = right i :. x
instance Functor ((:.) x) where fmap f (i :. x) = i :. (f x)
#ifdef __PURE__
lookUp :: k :. d -> Map i k a -> Maybe a
insert :: k :. d -> a -> Map i k a -> Map i k a
delete :: k :. d -> Map i k a -> Map i k a
member :: k :. d -> Map i k a -> Bool
#else
lookUp :: MaplikeClass i a => k :. d -> Maplike i k a -> Maybe a
insert :: MaplikeClass i a => k :. d -> a -> Maplike i k a -> Maplike i k a
delete :: MaplikeClass i a => k :. d -> Maplike i k a -> Maplike i k a
member :: MaplikeClass i a => k :. d -> Maplike i k a -> Bool
#endif
lookUp (a :. _) m = I.lookUp a m
insert (a :. _) x m = I.insert a x m
delete (a :. _) m = I.delete a m
member i = isJust . lookUp i
infixl 8 !
(!) :: I i => Map i k a -> k :. d -> a
m ! i = maybe (error "Data.IdMap.!") id (lookUp i m)
inserts :: I i => Map i k a -> [(k :. d, a)] -> Map i k a
inserts = foldl' (\m (i,x) -> insert i x m)
setInsert :: I i => k :. d -> Set i k -> Set i k
setInsert (a :. _) m = I.insert a () m
setInserts :: I i => Set i k -> [k :. d] -> Set i k
setInserts = foldl' (flip setInsert)