ptera-core-0.1.0.0: src/Language/Parser/Ptera/Data/Alignable/Map.hs
module Language.Parser.Ptera.Data.Alignable.Map (
T,
Map,
empty,
singleton,
insert,
lookup,
assocs,
toAscList,
restrictGreaterOrEqual,
) where
import Language.Parser.Ptera.Prelude hiding
(empty,
lookup)
import qualified Data.IntMap.Strict as IntMap
import qualified Language.Parser.Ptera.Data.Alignable as Alignable
import qualified Language.Parser.Ptera.Data.IntMap.GreaterRestriction as GreaterRestriction
type T = Map
newtype Map n a = Map (IntMap.IntMap a)
deriving (Eq, Show, Functor, Foldable, Traversable)
empty :: Map n a
empty = Map IntMap.empty
singleton :: forall n a. Alignable.T n => n -> a -> Map n a
singleton = coerce do IntMap.singleton @a
insert :: forall n a. Alignable.T n => n -> a -> Map n a -> Map n a
insert = coerce do IntMap.insert @a
lookup :: forall n a. Alignable.T n => n -> Map n a -> Maybe a
lookup = coerce do IntMap.lookup @a
assocs :: forall n a. Alignable.T n => Map n a -> [(n, a)]
assocs = coerce do IntMap.assocs @a
toAscList :: forall n a. Alignable.T n => Map n a -> [(n, a)]
toAscList = coerce do IntMap.toAscList @a
restrictGreaterOrEqual :: forall n a. Alignable.T n => n -> Map n a -> Map n a
restrictGreaterOrEqual n (Map m) = Map do
GreaterRestriction.restrictGreater (coerce n - 1) m