ddc-core-0.4.3.1: Disciplined Disciple Compiler core language and type checker.

Safe HaskellSafe
LanguageHaskell98

DDC.Core.Env.EnvX

Contents

Description

Environment of a type expression.

An environment contains the types named bound variables, named primitives, and a deBruijn stack for anonymous variables.

Synopsis

Documentation

data EnvX n Source #

Environment of term expressions.

Constructors

EnvX 

Fields

data EnvT n Source #

A type environment.

Constructors

EnvT 

Fields

Construction

empty :: EnvX n Source #

An empty environment.

fromPrimEnvs Source #

Arguments

:: Ord n 
=> KindEnv n

Primitive kind environment.

-> TypeEnv n

Primitive type environment.

-> DataDefs n

Primitive data type definitions.

-> EnvX n 

Build an EnvX from prim environments.

singleton :: Ord n => Bind n -> EnvX n Source #

Construct a singleton type environment.

extendX :: Ord n => Bind n -> EnvX n -> EnvX n Source #

Extend an environment with a new binding. Replaces bindings with the same name already in the environment.

extendsX :: Ord n => [Bind n] -> EnvX n -> EnvX n Source #

Extend an environment with a list of new bindings. Replaces bindings with the same name already in the environment.

extendT :: Ord n => Bind n -> EnvX n -> EnvX n Source #

Extend the environment with the kind of a new type variable.

extendsT :: Ord n => [Bind n] -> EnvX n -> EnvX n Source #

Extend the environment with some new type bindings.

union :: Ord n => EnvX n -> EnvX n -> EnvX n Source #

Combine two environments. If both environments have a binding with the same name, then the one in the second environment takes preference.

unions :: Ord n => [EnvX n] -> EnvX n Source #

Combine multiple environments, with the latter ones taking preference.

Conversion

fromList :: Ord n => [Bind n] -> EnvX n Source #

Convert a list of Binds to an environment.

fromListNT :: Ord n => [(n, Type n)] -> EnvX n Source #

Convert a list of name and types into an environment

fromTypeMap :: Map n (Type n) -> EnvX n Source #

Convert a map of names to types to a environment.

kindEnvOfEnvX :: Ord n => EnvX n -> KindEnv n Source #

Extract a KindEnv from an EnvX.

typeEnvOfEnvX :: Ord n => EnvX n -> TypeEnv n Source #

Extract TypeEnv from an `EnvX.

Projections

depth :: EnvX n -> Int Source #

Yield the total depth of the deBruijn stack.

lookupT :: Ord n => Bound n -> EnvX n -> Maybe (Kind n) Source #

Lookup a bound variable from an environment.

lookupX :: Ord n => Bound n -> EnvX n -> Maybe (Type n) Source #

Lookup a bound variable from an environment.

lookupNameX :: Ord n => n -> EnvX n -> Maybe (Type n) Source #

Lookup a bound name from an environment.

memberX :: Ord n => Bound n -> EnvX n -> Bool Source #

Check whether a bound variable is present in an environment.

memberBindX :: Ord n => Bind n -> EnvX n -> Bool Source #

Check whether a binder is already present in the an environment. This can only return True for named binders, not anonymous or primitive ones.

Primitives

setPrimFun :: (n -> Maybe (Type n)) -> EnvX n -> EnvX n Source #

Set the function that knows the types of primitive things.

isPrim :: EnvX n -> n -> Bool Source #

Check if the type of a name is defined by the envPrimFun.

Lifting

lift :: Ord n => Int -> EnvX n -> EnvX n Source #

Lift all free deBruijn indices in the environment by the given number of steps.