sessions-2008.3.29: Session Types for HaskellSource codeContentsIndex
Control.Concurrent.Session.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
data TyMap keyToIdx idxToValue = TM keyToIdx idxToValue
emptyMap :: TyMap Nil Nil
class MapInsert m1 key val m2 | m1 key val -> m2 where
mapInsert :: key -> val -> m1 -> m2
class MapLookup mp key val | mp key -> val where
mapLookup :: mp -> key -> val
class MapUpdate mp key val' mp' | mp key val' -> mp' where
mapUpdate :: mp -> key -> val' -> mp'
class MapSize mp size | mp -> size where
mapSize :: mp -> size
tyMapKeys :: TyMap keyToIdx idxToValue -> keyToIdx
class MapDelete mp key mp' | mp key -> mp' where
mapDelete :: mp -> key -> mp'
Documentation
data TyMap keyToIdx idxToValue Source
Constructors
TM keyToIdx idxToValue
show/hide Instances
(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)
emptyMap :: TyMap Nil NilSource
class MapInsert m1 key val m2 | m1 key val -> m2 whereSource
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 -> m2Source
show/hide Instances
(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')
class MapLookup mp key val | mp key -> val whereSource
lookup in a map. Will call fail in Monad if it's not there.
Methods
mapLookup :: mp -> key -> valSource
show/hide Instances
(TyListElem keyToIdx key idx, TyListIndex idxToValue idx val) => MapLookup (TyMap keyToIdx idxToValue) key val
class MapUpdate mp key val' mp' | mp key val' -> mp' whereSource
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
show/hide Instances
(TyListUpdateVar idxToValue idx val' idxToValue', TyListElem keyToIdx key idx, MapLookup (TyMap keyToIdx idxToValue') key val') => MapUpdate (TyMap keyToIdx idxToValue) key val' (TyMap keyToIdx idxToValue')
class MapSize mp size | mp -> size whereSource
Find the size of a map.
Methods
mapSize :: mp -> sizeSource
show/hide Instances
TyListLength keyToIdx len => MapSize (TyMap keyToIdx idxToValue) len
tyMapKeys :: TyMap keyToIdx idxToValue -> keyToIdxSource
class MapDelete mp key mp' | mp key -> mp' whereSource
Methods
mapDelete :: mp -> key -> mp'Source
show/hide Instances
(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')
Produced by Haddock version 2.3.0