uhc-util-0.1.6.5: UHC utilities

Safe HaskellNone
LanguageHaskell98

UHC.Util.VarMp

Description

A VarMp maps from variables (tvars, ...) to whatever else has to be mapped to (Ty, ...).

Starting with variant 6 (which introduces kinds) it allows multiple meta level mapping, in that the VarMp holds mappings for multiple meta levels. This allows one map to both map to base level info and to higher levels. In particular this is used by fitsIn which also instantiates types, and types may quantify over type variables with other kinds than kind *, which must be propagated. A separate map could have been used, but this holds the info together and is extendible to more levels.

A multiple level VarMp knows its own absolute metalevel, which is the default to use for lookup.

Synopsis

Documentation

data VarMp' k v Source

Constructors

VarMp 

Fields

varmpMetaLev :: !MetaLev

the base meta level

varmpMpL :: [Map k v]

for each level a map, starting at the base meta level

Instances

(Eq k, Eq v) => Eq (VarMp' k v) Source 
(Data k, Data v, Ord k) => Data (VarMp' k v) Source 
(Ord k, Ord v) => Ord (VarMp' k v) Source 
Show (VarMp' k v) Source 
Generic (VarMp' k v) Source 
(PP k, PP v) => PP (VarMp' k v) Source 
(Ord k, Serialize k, Serialize v) => Serialize (VarMp' k v) Source 
VarLookupBase (VarMp' k v) k v Source 
Ord k => VarLookup (VarMp' k v) k v Source 
Ord k => VarLookupCmb (VarMp' k v) (VarMp' k v) Source 
type Rep (VarMp' k v) Source 

ppVarMpV :: (PP k, PP v) => VarMp' k v -> PP_Doc Source

varmpFilter :: Ord k => (k -> v -> Bool) -> VarMp' k v -> VarMp' k v Source

varmpDel :: Ord k => [k] -> VarMp' k v -> VarMp' k v Source

Delete

(|\>) :: Ord k => VarMp' k v -> [k] -> VarMp' k v Source

varmpAlter :: Ord k => (Maybe v -> Maybe v) -> k -> VarMp' k v -> VarMp' k v Source

Alter irrespective of level

varmpUnion :: Ord k => VarMp' k v -> VarMp' k v -> VarMp' k v Source

varmpUnions :: Ord k => [VarMp' k v] -> VarMp' k v Source

mkVarMp :: Map k v -> VarMp' k v Source

varmpKeys :: Ord k => VarMp' k v -> [k] Source

varmpKeysSet :: Ord k => VarMp' k v -> Set k Source

varmpSingleton :: k -> v -> VarMp' k v Source

assocLToVarMp :: Ord k => AssocL k v -> VarMp' k v Source

varmpPlus :: Ord k => VarMp' k v -> VarMp' k v -> VarMp' k v infixr 7 Source

varmpUnionWith :: Ord k => (v -> v -> v) -> VarMp' k v -> VarMp' k v -> VarMp' k v Source

combine by taking the lowest level, adapting the lists with maps accordingly

varmpLookup :: (VarLookup m k i, Ord k) => k -> m -> Maybe i Source

ppVarMp :: (PP k, PP v) => ([PP_Doc] -> PP_Doc) -> VarMp' k v -> PP_Doc Source

varmpAsMap :: VarMp' k v -> (Map k v, Map k v -> VarMp' k v) Source

Extract first level map, together with a construction function putting a new map into the place of the previous one

varmpMapMaybe :: Ord k => (a -> Maybe b) -> VarMp' k a -> VarMp' k b Source

varmpMap :: Ord k => (a -> b) -> VarMp' k a -> VarMp' k b Source

varmpInsertWith :: Ord k => (v -> v -> v) -> k -> v -> VarMp' k v -> VarMp' k v Source

data VarMpStk' k v Source

Instances

Show (VarMpStk' k v) Source 
(PP k, PP v) => PP (VarMpStk' k v) Source 
Ord k => VarLookup (VarMpStk' k v) k v Source 
Ord k => VarLookupCmb (VarMpStk' k v) (VarMpStk' k v) Source 

varmpstkUnit :: Ord k => k -> v -> VarMpStk' k v Source

varmpToMap :: VarMp' k v -> Map k v Source