Copyright | (c) Galois Inc 2014-2017 |
---|---|
Safe Haskell | Trustworthy |
Language | Haskell98 |
This module defines finite maps where the key and value types are parameterized by an arbitrary kind.
Some code was adapted from containers.
- data MapF (k :: v -> *) (a :: v -> *)
- empty :: MapF k a
- singleton :: k tp -> a tp -> MapF k a
- insert :: OrdF k => k tp -> a tp -> MapF k a -> MapF k a
- insertWith :: OrdF k => (a tp -> a tp -> a tp) -> k tp -> a tp -> MapF k a -> MapF k a
- delete :: OrdF k => k tp -> MapF k a -> MapF k a
- union :: OrdF k => MapF k a -> MapF k a -> MapF k a
- null :: MapF k a -> Bool
- lookup :: OrdF k => k tp -> MapF k a -> Maybe (a tp)
- member :: OrdF k => k tp -> MapF k a -> Bool
- notMember :: OrdF k => k tp -> MapF k a -> Bool
- size :: IsBinTree t e => t -> Int
- keys :: MapF k a -> [Some k]
- elems :: MapF k a -> [Some a]
- fromList :: OrdF k => [Pair k a] -> MapF k a
- toList :: MapF k a -> [Pair k a]
- fromKeys :: forall m (t :: * -> *) (a :: k -> *) (v :: k -> *). (Monad m, Foldable t, OrdF a) => (forall tp. a tp -> m (v tp)) -> t (Some a) -> m (MapF a v)
- fromKeysM :: forall m (t :: * -> *) (a :: k -> *) (v :: k -> *). (Monad m, Foldable t, OrdF a) => (forall tp. a tp -> m (v tp)) -> t (Some a) -> m (MapF a v)
- filterGt :: OrdF k => k tp -> MapF k v -> MapF k v
- filterLt :: OrdF k => k tp -> MapF k v -> MapF k v
- foldrWithKey :: (forall s. k s -> a s -> b -> b) -> b -> MapF k a -> b
- map :: (forall tp. f tp -> g tp) -> MapF ktp f -> MapF ktp g
- mapMaybe :: (forall tp. f tp -> Maybe (g tp)) -> MapF ktp f -> MapF ktp g
- traverseWithKey :: Applicative m => (forall tp. ktp tp -> f tp -> m (g tp)) -> MapF ktp f -> m (MapF ktp g)
- traverseWithKey_ :: Applicative m => (forall tp. ktp tp -> f tp -> m ()) -> MapF ktp f -> m ()
- data UpdateRequest v
- data Updated a
- updatedValue :: Updated a -> a
- updateAtKey :: (OrdF k, Functor f) => k tp -> f (Maybe (a tp)) -> (a tp -> f (UpdateRequest (a tp))) -> MapF k a -> f (Updated (MapF k a))
- mergeWithKeyM :: forall k a b c m. (Applicative m, OrdF k) => (forall tp. k tp -> a tp -> b tp -> m (Maybe (c tp))) -> (MapF k a -> m (MapF k c)) -> (MapF k b -> m (MapF k c)) -> MapF k a -> MapF k b -> m (MapF k c)
- module Data.Parameterized.Classes
- data Pair (a :: k -> *) (b :: k -> *) where
Documentation
data MapF (k :: v -> *) (a :: v -> *) Source #
A map from parameterized keys to values with the same paramter type.
TraversableF k (MapF k ktp) Source # | |
FoldableF k (MapF k ktp) Source # | |
FunctorF k (MapF k ktp) Source # | |
OrdF a k => AtF a (MapF a k v) Source # | Turn a map key into a lens that points into the indicated position in the map. |
OrdF a k => IxedF a (MapF a k v) Source # | Turn a map key into a traversal that visits the indicated element in the map, if it exists. |
(TestEquality v k, EqF v a) => Eq (MapF v k a) Source # | |
(ShowF v ktp, ShowF v rtp) => Show (MapF v ktp rtp) Source # | |
IsBinTree (MapF k1 k2 a) (Pair k1 k2 a) Source # | |
type IxValueF k1 (MapF k1 k2 v) Source # | |
type IndexF k1 (MapF k1 k2 v) Source # | |
Construction
insert :: OrdF k => k tp -> a tp -> MapF k a -> MapF k a Source #
Insert a binding into the map, replacing the existing binding if needed.
insertWith :: OrdF k => (a tp -> a tp -> a tp) -> k tp -> a tp -> MapF k a -> MapF k a Source #
insertWith f new m
inserts the binding into m
.
It inserts f new old
if m
already contains an equivaltn value
old
, and new
otherwise. It returns an Unchanged value if the
map stays the same size and an updated value if a new entry was
inserted.
Query
Conversion
elems :: MapF k a -> [Some a] Source #
Return all elements of the map in the ascending order of their keys.
:: forall (t :: * -> *) (a :: k -> *) (v :: k -> *). (Monad m, Foldable t, OrdF a) | |
=> (forall tp. a tp -> m (v tp)) | Function for evaluating a register value. |
-> t (Some a) | Set of X86 registers |
-> m (MapF a v) |
Generate a map from a foldable collection of keys and a function from keys to values.
:: forall (t :: * -> *) (a :: k -> *) (v :: k -> *). (Monad m, Foldable t, OrdF a) | |
=> (forall tp. a tp -> m (v tp)) | Function for evaluating a register value. |
-> t (Some a) | Set of X86 registers |
-> m (MapF a v) |
Generate a map from a foldable collection of keys and a monadic function from keys to values.
Filter
filterGt :: OrdF k => k tp -> MapF k v -> MapF k v Source #
filterGt k m
returns submap of m
that only contains entries
that are larger than k
.
filterLt :: OrdF k => k tp -> MapF k v -> MapF k v Source #
filterLt k m
returns submap of m
that only contains entries
that are smaller than k
.
Folds
foldrWithKey :: (forall s. k s -> a s -> b -> b) -> b -> MapF k a -> b Source #
Perform a fold with the key also provided.
Traversal
mapMaybe :: (forall tp. f tp -> Maybe (g tp)) -> MapF ktp f -> MapF ktp g Source #
Run partial map over elements.
traverseWithKey :: Applicative m => (forall tp. ktp tp -> f tp -> m (g tp)) -> MapF ktp f -> m (MapF ktp g) Source #
Traverse elements in a map
traverseWithKey_ :: Applicative m => (forall tp. ktp tp -> f tp -> m ()) -> MapF ktp f -> m () Source #
Traverse elements in a map without returning result.
Complex interface.
data UpdateRequest v Source #
Update request tells when to do with value
Updated a contains a value that has been flagged on whether it was modified by an operation.
updatedValue :: Updated a -> a Source #
:: (OrdF k, Functor f) | |
=> k tp | Key to update |
-> f (Maybe (a tp)) | Action to call if nothing is found |
-> (a tp -> f (UpdateRequest (a tp))) | Action to call if value is found. |
-> MapF k a | Map to update |
-> f (Updated (MapF k a)) |
Log-time algorithm that allows a value at a specific key to be added, replaced, or deleted.
mergeWithKeyM :: forall k a b c m. (Applicative m, OrdF k) => (forall tp. k tp -> a tp -> b tp -> m (Maybe (c tp))) -> (MapF k a -> m (MapF k c)) -> (MapF k b -> m (MapF k c)) -> MapF k a -> MapF k b -> m (MapF k c) Source #
Merge bindings in two maps to get a third.
module Data.Parameterized.Classes