sessions-2008.2.28: 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 and I also don't actually check that a key doesn't already exist - i.e. every time you insert the same key, the map changes. So not really a map after all...
Synopsis
data TyMap 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 :: Monad m => mp -> key -> m val
class MapUpdate mp key val' mp' | mp key val' -> mp' where
mapUpdate :: Monad m => mp -> key -> val' -> m mp'
class MapWith mp key val val' mp' | mp key -> val, mp key val' -> mp' where
mapWith :: Monad m => mp -> key -> (val -> m val') -> m mp'
class MapSize mp size | mp -> size where
mapSize :: mp -> size
Documentation
data TyMap keyToIdx idxToValue Source
show/hide Instances
(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, TyListIndex idxToValue idx val, MapLookup (TyMap keyToIdx idxToValue) key val, MapLookup (TyMap keyToIdx idxToValue') key val') => MapWith (TyMap keyToIdx idxToValue) key val val' (TyMap keyToIdx idxToValue')
(TyListUpdateVar idxToValue idx val' idxToValue', TyListElem keyToIdx key idx, MapLookup (TyMap keyToIdx idxToValue') key val') => MapUpdate (TyMap keyToIdx idxToValue) key val' (TyMap keyToIdx idxToValue')
(TyListLength keyToIdx newIdx, TyListReverse keyToIdx keyToIdxRev, TyListReverse (Cons key keyToIdxRev) keyToIdx', TyListUpdateVar idxToValue newIdx value idxToValue', TyList keyToIdxRev) => MapInsert (TyMap keyToIdx idxToValue) key value (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.
Methods
mapInsert :: key -> val -> m1 -> m2Source
show/hide Instances
(TyListLength keyToIdx newIdx, TyListReverse keyToIdx keyToIdxRev, TyListReverse (Cons key keyToIdxRev) keyToIdx', TyListUpdateVar idxToValue newIdx value idxToValue', TyList keyToIdxRev) => MapInsert (TyMap keyToIdx idxToValue) key value (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 :: Monad m => mp -> key -> m 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 :: Monad m => mp -> key -> val' -> m 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 MapWith mp key val val' mp' | mp key -> val, mp key val' -> mp' whereSource
A helper class - the ability to modify a value in the map and immediately update the map.
Methods
mapWith :: Monad m => mp -> key -> (val -> m val') -> m mp'Source
show/hide Instances
(TyListUpdateVar idxToValue idx val' idxToValue', TyListElem keyToIdx key idx, TyListIndex idxToValue idx val, MapLookup (TyMap keyToIdx idxToValue) key val, MapLookup (TyMap keyToIdx idxToValue') key val') => MapWith (TyMap keyToIdx idxToValue) key val 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
Produced by Haddock version 2.3.0