hermit-0.1.8.0: Haskell Equational Reasoning Model-to-Implementation Tunnel

Safe HaskellNone

Language.HERMIT.Core

Contents

Synopsis

Generic Data Type

NOTE: Type is not included in the sum type. However, we could have included it and provided the facility for descending into types. We have not done so because (a) we do not need that functionality, and (b) the types are complicated and we're not sure that we understand them.

data Core Source

Core is the sum type of all nodes in the AST that we wish to be able to traverse.

Constructors

GutsCore ModGuts

The module.

ProgCore CoreProg

A program (a telescope of top-level binding groups).

BindCore CoreBind

A binding group.

DefCore CoreDef

A recursive definition.

ExprCore CoreExpr

An expression.

AltCore CoreAlt

A case alternative.

data CoreProg Source

A program is a telescope of nested binding groups. That is, each binding scopes over the remainder of the program. In GHC Core, programs are encoded as [CoreBind]. This data type is isomorphic.

Constructors

ProgNil

An empty program.

ProgCons CoreBind CoreProg

A binding group and the program it scopes over.

data CoreDef Source

A (potentially recursive) definition is an identifier and an expression. In GHC Core, recursive definitions are encoded as (Id, CoreExpr) pairs. This data type is isomorphic.

Constructors

Def Id CoreExpr 

type CoreTickish = Tickish IdSource

Unlike everything else, there is no synonym for Tickish Id provided by GHC, so we define one.

Conversions to/from Core

defsToRecBind :: [CoreDef] -> CoreBindSource

Convert a list of recursive definitions into an (isomorphic) recursive binding group.

defToIdExpr :: CoreDef -> (Id, CoreExpr)Source

Convert a definition to an identifier/expression pair.

progToBinds :: CoreProg -> [CoreBind]Source

Get the list of bindings in a program.

bindsToProg :: [CoreBind] -> CoreProgSource

Build a program from a list of bindings. Note that bindings earlier in the list are considered scope over bindings later in the list.

bindToIdExprs :: CoreBind -> [(Id, CoreExpr)]Source

Extract the list of identifier/expression pairs from a binding group.

Utilities

isCoArg :: CoreExpr -> BoolSource

Returns True iff the expression is a Coercion expression at its top level.

exprTypeOrKind :: CoreExpr -> TypeSource

GHC's exprType function throws an error if applied to a Type (but, inconsistently, return a Kind if applied to a type variable). This function returns the Kind of a Type, but otherwise behaves as exprType.

endoFunType :: Monad m => CoreExpr -> m TypeSource

Return the domain/codomain type of an endofunction expression.

funArgResTypes :: Monad m => CoreExpr -> m (Type, Type)Source

Return the domain and codomain types of a function expression.

funsWithInverseTypes :: MonadCatch m => CoreExpr -> CoreExpr -> m (Type, Type)Source

Check two expressions have types a -> b and b -> a, returning (a,b).

appCount :: CoreExpr -> IntSource

Count the number of nested applications.