sessions-2008.3.24: 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
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) => MapInsert' False (TyMap keyToIdx idxToValue) key value (TyMap keyToIdx' idxToValue')
(TyListUpdateVar idxToValue idx value idxToValue', TyListElem keyToIdx key idx) => MapInsert' True (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')) => MapInsert (TyMap keyToIdx idxToValue) key val (TyMap keyToIdx' idxToValue')
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 will update the value.
Methods
mapInsert :: key -> val -> m1 -> m2Source
show/hide Instances
(TyListMember keyToIdx key res, MapInsert' res (TyMap keyToIdx idxToValue) key val (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
Produced by Haddock version 2.3.0