Safe Haskell | None |
---|---|
Language | Haskell98 |
Abstractions for looking up (type) variables in structures
- class VarLookup m where
- type family VarLookupKey m :: *
- type family VarLookupVal m :: *
- varlookupResolveVarWithMetaLev :: VarLookup m => MetaLev -> (VarLookupVal m -> Maybe (VarLookupKey m)) -> VarLookupKey m -> m -> Maybe (VarLookupVal m)
- varlookupResolveVar :: VarLookup m => (VarLookupVal m -> Maybe (VarLookupKey m)) -> VarLookupKey m -> m -> Maybe (VarLookupVal m)
- varlookupResolveValWithMetaLev :: VarLookup m => MetaLev -> (VarLookupVal m -> Maybe (VarLookupKey m)) -> VarLookupVal m -> m -> Maybe (VarLookupVal m)
- varlookupResolveVal :: VarLookup m => (VarLookupVal m -> Maybe (VarLookupKey m)) -> VarLookupVal m -> m -> Maybe (VarLookupVal m)
- varlookupMap :: VarLookup m => (VarLookupVal m -> Maybe res) -> VarLookupKey m -> m -> Maybe res
- varlookupResolveAndContinueM :: (Monad m, VarLookup s) => (VarLookupVal s -> Maybe (VarLookupKey s)) -> m s -> m a -> (VarLookupVal s -> m a) -> VarLookupKey s -> m a
- type VarLookupFix k v = k -> Maybe v
- varlookupFix :: VarLookup m => m -> VarLookupFix (VarLookupKey m) (VarLookupVal m)
- varlookupFixDel :: Ord k => [k] -> VarLookupFix k v -> VarLookupFix k v
- class VarLookupCmb m1 m2 where
- type VarLookupCmbFix m1 m2 = m1 -> m2 -> m2
- varlookupcmbFix :: VarLookupCmb m1 m2 => VarLookupCmbFix m1 m2
- type MetaLev = Int
- metaLevVal :: MetaLev
- newtype StackedVarLookup s = StackedVarLookup {
- unStackedVarLookup :: [s]
Documentation
class VarLookup m where Source #
VarLookup abstracts from a Map. The purpose is to be able to combine maps only for the purpose of searching without actually merging the maps. This then avoids the later need to unmerge such mergings. The class interface serves to hide this.
varlookupWithMetaLev :: MetaLev -> VarLookupKey m -> m -> Maybe (VarLookupVal m) Source #
Lookup a key at a level
varlookup :: VarLookupKey m -> m -> Maybe (VarLookupVal m) Source #
Lookup a key
varlookupKeysSetWithMetaLev :: Ord (VarLookupKey m) => MetaLev -> m -> Set (VarLookupKey m) Source #
Keys at a level
varlookupKeysSet :: Ord (VarLookupKey m) => m -> Set (VarLookupKey m) Source #
Keys as Set
varlookupEmpty :: m Source #
Make an empty VarLookup
varlookupSingletonWithMetaLev :: MetaLev -> VarLookupKey m -> VarLookupVal m -> m Source #
Make a singleton VarLookup at a level
varlookupSingleton :: VarLookupKey m -> VarLookupVal m -> m Source #
Make a singleton VarLookup
type family VarLookupKey m :: * Source #
Type family for key of a VarLookup
type VarLookupKey (StackedVarLookup s) Source # | |
type VarLookupKey (VarMp' k v) Source # | |
type VarLookupKey (VarMp' k v) Source # | |
type family VarLookupVal m :: * Source #
Type family for value of a VarLookup
type VarLookupVal (StackedVarLookup s) Source # | |
type VarLookupVal (VarMp' k v) Source # | |
type VarLookupVal (VarMp' k v) Source # | |
varlookupResolveVarWithMetaLev :: VarLookup m => MetaLev -> (VarLookupVal m -> Maybe (VarLookupKey m)) -> VarLookupKey m -> m -> Maybe (VarLookupVal m) Source #
Fully resolve lookup
varlookupResolveVar :: VarLookup m => (VarLookupVal m -> Maybe (VarLookupKey m)) -> VarLookupKey m -> m -> Maybe (VarLookupVal m) Source #
Fully resolve lookup
varlookupResolveValWithMetaLev :: VarLookup m => MetaLev -> (VarLookupVal m -> Maybe (VarLookupKey m)) -> VarLookupVal m -> m -> Maybe (VarLookupVal m) Source #
varlookupResolveVal :: VarLookup m => (VarLookupVal m -> Maybe (VarLookupKey m)) -> VarLookupVal m -> m -> Maybe (VarLookupVal m) Source #
Fully resolve lookup
varlookupMap :: VarLookup m => (VarLookupVal m -> Maybe res) -> VarLookupKey m -> m -> Maybe res Source #
Combine lookup with map; should be obsolete...
varlookupResolveAndContinueM :: (Monad m, VarLookup s) => (VarLookupVal s -> Maybe (VarLookupKey s)) -> m s -> m a -> (VarLookupVal s -> m a) -> VarLookupKey s -> m a Source #
Monadically lookup a variable, resolve it, continue with either a fail or success monad continuation
type VarLookupFix k v = k -> Maybe v Source #
varlookupFix :: VarLookup m => m -> VarLookupFix (VarLookupKey m) (VarLookupVal m) Source #
fix looking up to be for a certain var mapping
varlookupFixDel :: Ord k => [k] -> VarLookupFix k v -> VarLookupFix k v Source #
simulate deletion
class VarLookupCmb m1 m2 where Source #
VarLookupCmb abstracts the combining
of/from a substitution.
The interface goes along with VarLookup but is split off to avoid functional dependency restrictions.
The purpose is to be able to combine maps only for the purpose of searching without actually merging the maps.
This then avoids the later need to unmerge such mergings.
VarLookupCmb m1 m2 => VarLookupCmb m1 (StackedVarLookup m2) Source # | |
Ord k => VarLookupCmb (VarMp' k v) (VarMp' k v) Source # | |
Ord k => VarLookupCmb (VarMp' k v) (VarMp' k v) Source # | |
type VarLookupCmbFix m1 m2 = m1 -> m2 -> m2 Source #
Deprecated: As of 20160331: don't use these anymore
varlookupcmbFix :: VarLookupCmb m1 m2 => VarLookupCmbFix m1 m2 Source #
Deprecated: As of 20160331: don't use these anymore
fix combining up to be for a certain var mapping
metaLevVal :: MetaLev Source #
Base level (of values, usually)
newtype StackedVarLookup s Source #
Stacked VarLookup derived from a base one, to allow a use of multiple lookups but update on top only
Foldable StackedVarLookup Source # | |
VarLookupCmb m1 m2 => VarLookupCmb m1 (StackedVarLookup m2) Source # | |
Show (StackedVarLookup s) Source # | |
PP s => PP (StackedVarLookup s) Source # | |
VarLookup m => VarLookup (StackedVarLookup m) Source # | |
type VarLookupVal (StackedVarLookup s) Source # | |
type VarLookupKey (StackedVarLookup s) Source # | |
type CHRMatchableKey (StackedVarLookup subst) Source # | |