|
Control.Concurrent.Session.Base.Map |
|
|
Description |
Heterogeneous maps at the type level. Obviously equality is done
on types and not values. Duplicate keys are not permitted, as you'd expect.
|
|
Synopsis |
|
|
|
Documentation |
|
data TyMap keyToIdx idxToValue | Source |
|
Constructors | | Instances | ReducePairStructs orig (TyMap Nil Nil) acc acc | (TyListLength keyToIdx newIdx, TyListReverse keyToIdx keyToIdxRev, TyListReverse (Cons key keyToIdxRev) keyToIdx', TyListUpdateVar idxToValue newIdx value idxToValue', TyList keyToIdxRev, MapDelete (TyMap keyToIdx' idxToValue') key (TyMap keyToIdx idxToValue)) => MapInsert' False (TyMap keyToIdx idxToValue) key value (TyMap keyToIdx' idxToValue') | (BuildPidTyMap' prog nxt (TyMap keyToIdx idxToValue) (TyMap keyToIdx' idxToValue'), TyList nxt) => BuildPidTyMap' prog (Cons ((,) init True) nxt) (TyMap keyToIdx idxToValue) (TyMap keyToIdx' idxToValue') | (BuildPidTyMap' prog nxt (TyMap keyToIdx idxToValue) (TyMap keyToIdx' idxToValue'), MapInsert (TyMap keyToIdx' idxToValue') init (MVar (Map ((,) RawPid RawPid) (MVar (PairStruct init prog prog' ((,,) (Cons (Jump init) Nil) (Cons (Jump init) Nil) (Cons (Jump init) Nil)))))) (TyMap keyToIdx'' idxToValue''), TyList nxt) => BuildPidTyMap' prog (Cons ((,) init False) nxt) (TyMap keyToIdx idxToValue) (TyMap keyToIdx'' idxToValue'') | (Show keyToIdx, Show idxToValue) => Show (TyMap keyToIdx idxToValue) | TyListLength keyToIdx len => MapSize (TyMap keyToIdx idxToValue) len | (TyListElem keyToIdx key idx, TyListIndex idxToValue idx val) => MapLookup (TyMap keyToIdx idxToValue) key val | (TyListUpdateVar idxToValue idx val' idxToValue', TyListElem keyToIdx key idx, MapLookup (TyMap keyToIdx idxToValue') key val') => MapUpdate (TyMap keyToIdx idxToValue) key val' (TyMap keyToIdx idxToValue') | (TyListMember keyToIdx key res, MapInsert' res (TyMap keyToIdx idxToValue) key val (TyMap keyToIdx' idxToValue'), MapDelete (TyMap keyToIdx' idxToValue') key (TyMap keyToIdx idxToValue)) => MapInsert (TyMap keyToIdx idxToValue) key val (TyMap keyToIdx' idxToValue') | (TyListElem keyToIdx key idx, TyListTake idx keyToIdx keyToIdxPrefix, TyListTake idx idxToValue idxToValuePrefix, TyListDrop idxP keyToIdx keyToIdxSuffix, TyListDrop idxP idxToValue idxToValueSuffix, Succ idx idxP, Pred idxP idx, TyListAppend keyToIdxPrefix keyToIdxSuffix keyToIdx', TyListAppend idxToValuePrefix idxToValueSuffix idxToValue') => MapDelete (TyMap keyToIdx idxToValue) key (TyMap keyToIdx' idxToValue') | (FindNonEmptyIncoming (TyMap keyToIdx idxToValue) nxt, MapLookup (TyMap keyToIdx idxToValue) idx (SessionState prog prog' ((,,) current fromO fromI)), TypeNumberToInt idx) => FindNonEmptyIncoming (TyMap keyToIdx idxToValue) (Cons idx nxt) | (MapLookup (TyMap keyToIdx idxToValue) idx (SessionState prog prog' ((,,) current fromO fromI)), SetIncomingNotify (TyMap keyToIdx idxToValue) nxt, TypeNumberToInt idx) => SetIncomingNotify (TyMap keyToIdx idxToValue) (Cons idx nxt) | (ReducePairStructs (TyMap origKeys origVals) (TyMap keys vals') (TyMap accKeys' accVals') result, MapInsert (TyMap accKeys accVals) key val (TyMap accKeys' accVals'), MapLookup (TyMap origKeys origVals) key val, MapLookup (TyMap (Cons key keys) vals) key val, MapDelete (TyMap (Cons key keys) vals) key (TyMap keys vals'), TyListElem origKeys key idx, TyListIndex origKeys idx key) => ReducePairStructs (TyMap origKeys origVals) (TyMap (Cons key keys) vals) (TyMap accKeys accVals) result |
|
|
|
|
|
class MapInsert m1 key val m2 | m1 key val -> m2 where | Source |
|
Insert into a map. Remember, the values are irrelevant, it's only
the types that matter. Inserting a key that already exists is not
permitted.
| | Methods | mapInsert :: key -> val -> m1 -> m2 | Source |
|
| | Instances | |
|
|
class MapLookup mp key val | mp key -> val where | Source |
|
lookup in a map. Will call fail in Monad if it's not there.
| | Methods | mapLookup :: mp -> key -> val | Source |
|
| | Instances | |
|
|
class MapUpdate mp key val' mp' | mp key val' -> mp' where | Source |
|
Update a map. The key must already be in the map. The value is
the type of the value, if you see what I mean and so obviously,
updating the map means changing the type of the value.
| | Methods | mapUpdate :: mp -> key -> val' -> mp' | Source |
|
| | Instances | |
|
|
class MapSize mp size | mp -> size where | Source |
|
Find the size of a map.
| | Methods | | | Instances | |
|
|
tyMapKeys :: TyMap keyToIdx idxToValue -> keyToIdx | Source |
|
|
class MapDelete mp key mp' | mp key -> mp' where | Source |
|
| Methods | mapDelete :: mp -> key -> mp' | Source |
|
| | Instances | |
|
|
Produced by Haddock version 2.4.2 |