termonad-4.6.0.0: Terminal emulator configurable in Haskell
Copyright(c) Dennis Gosnell 2023
LicenseBSD3
Stabilityexperimental
PortabilityPOSIX
Safe HaskellSafe-Inferred
LanguageHaskell2010

Termonad.IdMap.Internal

Description

 
Synopsis

Documentation

newtype IdMapKey Source #

Constructors

IdMapKey 

Fields

Instances

Instances details
Show IdMapKey Source # 
Instance details

Defined in Termonad.IdMap.Internal

Eq IdMapKey Source # 
Instance details

Defined in Termonad.IdMap.Internal

data IdMap a Source #

Constructors

IdMap 

Fields

Instances

Instances details
Foldable IdMap Source # 
Instance details

Defined in Termonad.IdMap.Internal

Methods

fold :: Monoid m => IdMap m -> m #

foldMap :: Monoid m => (a -> m) -> IdMap a -> m #

foldMap' :: Monoid m => (a -> m) -> IdMap a -> m #

foldr :: (a -> b -> b) -> b -> IdMap a -> b #

foldr' :: (a -> b -> b) -> b -> IdMap a -> b #

foldl :: (b -> a -> b) -> b -> IdMap a -> b #

foldl' :: (b -> a -> b) -> b -> IdMap a -> b #

foldr1 :: (a -> a -> a) -> IdMap a -> a #

foldl1 :: (a -> a -> a) -> IdMap a -> a #

toList :: IdMap a -> [a] #

null :: IdMap a -> Bool #

length :: IdMap a -> Int #

elem :: Eq a => a -> IdMap a -> Bool #

maximum :: Ord a => IdMap a -> a #

minimum :: Ord a => IdMap a -> a #

sum :: Num a => IdMap a -> a #

product :: Num a => IdMap a -> a #

Traversable IdMap Source # 
Instance details

Defined in Termonad.IdMap.Internal

Methods

traverse :: Applicative f => (a -> f b) -> IdMap a -> f (IdMap b) #

sequenceA :: Applicative f => IdMap (f a) -> f (IdMap a) #

mapM :: Monad m => (a -> m b) -> IdMap a -> m (IdMap b) #

sequence :: Monad m => IdMap (m a) -> m (IdMap a) #

Functor IdMap Source # 
Instance details

Defined in Termonad.IdMap.Internal

Methods

fmap :: (a -> b) -> IdMap a -> IdMap b #

(<$) :: a -> IdMap b -> IdMap a #

FoldableWithIndex Int IdMap Source # 
Instance details

Defined in Termonad.IdMap.Internal

Methods

ifoldMap :: Monoid m => (Int -> a -> m) -> IdMap a -> m #

ifoldMap' :: Monoid m => (Int -> a -> m) -> IdMap a -> m #

ifoldr :: (Int -> a -> b -> b) -> b -> IdMap a -> b #

ifoldl :: (Int -> b -> a -> b) -> b -> IdMap a -> b #

ifoldr' :: (Int -> a -> b -> b) -> b -> IdMap a -> b #

ifoldl' :: (Int -> b -> a -> b) -> b -> IdMap a -> b #

Show a => Show (IdMap a) Source # 
Instance details

Defined in Termonad.IdMap.Internal

Methods

showsPrec :: Int -> IdMap a -> ShowS #

show :: IdMap a -> String #

showList :: [IdMap a] -> ShowS #

Eq a => Eq (IdMap a) Source #

IdMaps are equal if they contain the same elements at the same keys.

>>> let (helloKey, idmapA) = insertIdMap "hello" emptyIdMap
>>> let (_, idmapB) = singletonIdMap "hello"
>>> idmapA == idmapB
True

Note that if you delete and reinsert a value, it will get a different key, so will no longer be equal.

>>> let (_, idmapA') = insertIdMap "hello" $ deleteIdMap helloKey idmapA
>>> idmapA' == idmapB
False

However, IdMaps don't check the nextId field when determining equality.

>>> let (byeKey, idmapA'') = insertIdMap "bye" idmapA
>>> let idmapA''' = deleteIdMap byeKey idmapA''
>>> idmapA''' == idmapB
True
Instance details

Defined in Termonad.IdMap.Internal

Methods

(==) :: IdMap a -> IdMap a -> Bool #

(/=) :: IdMap a -> IdMap a -> Bool #

Ixed (IdMap a) Source # 
Instance details

Defined in Termonad.IdMap.Internal

Methods

ix :: Index (IdMap a) -> Traversal' (IdMap a) (IxValue (IdMap a)) #

type Index (IdMap a) Source # 
Instance details

Defined in Termonad.IdMap.Internal

type Index (IdMap a) = IdMapKey
type IxValue (IdMap a) Source # 
Instance details

Defined in Termonad.IdMap.Internal

type IxValue (IdMap a) = a

succId :: Int -> Int Source #

Get the next available ID.

>>> succId 3
4

emptyIdMap :: IdMap a Source #

An initial IdMap with no values.

>>> emptyIdMap
IdMap {idMap = fromList [], nextId = 0}

insertIdMap :: a -> IdMap a -> (IdMapKey, IdMap a) Source #

Insert a value into an IdMap. Returns the key for the newly inserted item.

>>> let (key, idmap) = insertIdMap "hello" emptyIdMap
>>> (key, idmap)
(IdMapKey {unIdMapKey = 0},IdMap {idMap = fromList [(0,"hello")], nextId = 1})
>>> insertIdMap "zoom" idmap
(IdMapKey {unIdMapKey = 1},IdMap {idMap = fromList [(0,"hello"),(1,"zoom")], nextId = 2})

singletonIdMap :: a -> (IdMapKey, IdMap a) Source #

Create an IdMap with a single value.

>>> singletonIdMap "hello"
(IdMapKey {unIdMapKey = 0},IdMap {idMap = fromList [(0,"hello")], nextId = 1})
\a -> insertIdMap a emptyIdMap == singletonIdMap a

lookupIdMap :: IdMapKey -> IdMap a -> Maybe a Source #

Lookup the given key in an IdMap.

>>> let (key, idmap) = insertIdMap "hello" emptyIdMap
>>> lookupIdMap key idmap
Just "hello"

Trying to lookup keys that don't exist returns Nothing:

>>> let idmap' = deleteIdMap key idmap
>>> lookupIdMap key idmap'
Nothing

keysIdMap :: IdMap a -> [IdMapKey] Source #

List all keys in an IdMap.

>>> let (_, idmap) = singletonIdMap "hello"
>>> let (_, idmap') = insertIdMap "bye" idmap
>>> keysIdMap idmap'
[IdMapKey {unIdMapKey = 0},IdMapKey {unIdMapKey = 1}]

Returns the empty list when passed an empty IdMap:

>>> keysIdMap emptyIdMap
[]

deleteIdMap :: IdMapKey -> IdMap a -> IdMap a Source #

Delete a key and its value from the map. When the key is not a member of the map, the original map is returned.

>>> let (key, idmap) = singletonIdMap "hello"
>>> let (_, idmap') = insertIdMap "bye" idmap
>>> deleteIdMap key idmap'
IdMap {idMap = fromList [(1,"bye")], nextId = 2}

Deleting a key that does not exist just returns the old map:

>>> deleteIdMap key idmap'
IdMap {idMap = fromList [(1,"bye")], nextId = 2}