aztecs-0.2.0.0: src/Data/Aztecs/Storage.hs
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE MonoLocalBinds #-}
{-# LANGUAGE MultiParamTypeClasses #-}
module Data.Aztecs.Storage (Storage(..)) where
import Data.Data (Typeable)
import Data.IntMap (IntMap)
import qualified Data.IntMap as IntMap
class (Typeable (s a), Typeable a) => Storage s a where
singleton :: Int -> a -> s a
all :: s a -> [(Int, a)]
insert :: Int -> a -> s a -> s a
lookup :: Int -> s a -> Maybe a
fromAscList :: [(Int, a)] -> s a
remove :: Int -> s a -> (Maybe a, s a)
instance (Typeable a) => Storage IntMap a where
singleton = IntMap.singleton
all = IntMap.toList
insert = IntMap.insert
lookup = IntMap.lookup
fromAscList = IntMap.fromAscList
remove i s = (IntMap.lookup i s, IntMap.delete i s) -- TODO remove double lookup