{-# 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 :: Int -> a -> IntMap a
singleton = Int -> a -> IntMap a
forall a. Int -> a -> IntMap a
IntMap.singleton
all :: IntMap a -> [(Int, a)]
all = IntMap a -> [(Int, a)]
forall a. IntMap a -> [(Int, a)]
IntMap.toList
insert :: Int -> a -> IntMap a -> IntMap a
insert = Int -> a -> IntMap a -> IntMap a
forall a. Int -> a -> IntMap a -> IntMap a
IntMap.insert
lookup :: Int -> IntMap a -> Maybe a
lookup = Int -> IntMap a -> Maybe a
forall a. Int -> IntMap a -> Maybe a
IntMap.lookup
fromAscList :: [(Int, a)] -> IntMap a
fromAscList = [(Int, a)] -> IntMap a
forall a. [(Int, a)] -> IntMap a
IntMap.fromAscList
remove :: Int -> IntMap a -> (Maybe a, IntMap a)
remove Int
i IntMap a
s = (Int -> IntMap a -> Maybe a
forall a. Int -> IntMap a -> Maybe a
IntMap.lookup Int
i IntMap a
s, Int -> IntMap a -> IntMap a
forall a. Int -> IntMap a -> IntMap a
IntMap.delete Int
i IntMap a
s)