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

Safe HaskellNone

HERMIT.Kure.SumTypes

Contents

Synopsis

Sum Types

data Core Source

Core is a sum type for use by KURE. Core = ModGuts + CoreProg + CoreBind + CoreDef + CoreExpr + CoreAlt

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 TyCo Source

TyCo is a sum type for use by KURE. TyCo = Type + Coercion

Constructors

TypeCore Type

A type.

CoercionCore Coercion

A coercion.

Instances

data CoreTC Source

CoreTC is a sum type for use by KURE. CoreTC = Core + TyCo

Constructors

Core Core 
TyCo TyCo 

Equality

Syntactic Equality

coreSyntaxEq :: Core -> Core -> BoolSource

Syntactic equality of Core fragments.

tyCoSyntaxEq :: TyCo -> TyCo -> BoolSource

Syntactic equality of TyCo fragments.

coreTCSyntaxEq :: CoreTC -> CoreTC -> BoolSource

Syntactic equality of CoreTC fragments.

Alpha Equality

coreAlphaEq :: Core -> Core -> BoolSource

Alpha equality of Core fragments.

tyCoAlphaEq :: TyCo -> TyCo -> BoolSource

Alpha equality of TyCo fragments.

coreTCAlphaEq :: CoreTC -> CoreTC -> BoolSource

Alpha equality of CoreTC fragments.

Collecting Free Variables

freeVarsCore :: Core -> VarSetSource

Find all free variables in a Core node.

freeVarsTyCo :: TyCo -> VarSetSource

Find all free variables in a TyCo node.

freeVarsCoreTC :: CoreTC -> VarSetSource

Find all free variables in a CoreTC node.

Promotion Combinators

Translate Promotions

promoteModGutsT :: (Monad m, Injection ModGuts g) => Translate c m ModGuts b -> Translate c m g bSource

Promote a translate on ModGuts.

promoteProgT :: (Monad m, Injection CoreProg g) => Translate c m CoreProg b -> Translate c m g bSource

Promote a translate on CoreProg.

promoteBindT :: (Monad m, Injection CoreBind g) => Translate c m CoreBind b -> Translate c m g bSource

Promote a translate on CoreBind.

promoteDefT :: (Monad m, Injection CoreDef g) => Translate c m CoreDef b -> Translate c m g bSource

Promote a translate on CoreDef.

promoteExprT :: (Monad m, Injection CoreExpr g) => Translate c m CoreExpr b -> Translate c m g bSource

Promote a translate on CoreExpr.

promoteAltT :: (Monad m, Injection CoreAlt g) => Translate c m CoreAlt b -> Translate c m g bSource

Promote a translate on CoreAlt.

promoteTypeT :: (Monad m, Injection Type g) => Translate c m Type b -> Translate c m g bSource

Promote a translate on Type.

promoteCoercionT :: (Monad m, Injection Coercion g) => Translate c m Coercion b -> Translate c m g bSource

Promote a translate on Coercion.

Rewrite Promotions

promoteModGutsR :: (Monad m, Injection ModGuts g) => Rewrite c m ModGuts -> Rewrite c m gSource

Promote a rewrite on ModGuts.

promoteProgR :: (Monad m, Injection CoreProg g) => Rewrite c m CoreProg -> Rewrite c m gSource

Promote a rewrite on CoreProg.

promoteBindR :: (Monad m, Injection CoreBind g) => Rewrite c m CoreBind -> Rewrite c m gSource

Promote a rewrite on CoreBind.

promoteDefR :: (Monad m, Injection CoreDef g) => Rewrite c m CoreDef -> Rewrite c m gSource

Promote a rewrite on CoreDef.

promoteExprR :: (Monad m, Injection CoreExpr g) => Rewrite c m CoreExpr -> Rewrite c m gSource

Promote a rewrite on CoreExpr.

promoteAltR :: (Monad m, Injection CoreAlt g) => Rewrite c m CoreAlt -> Rewrite c m gSource

Promote a rewrite on CoreAlt.

promoteTypeR :: (Monad m, Injection Type g) => Rewrite c m Type -> Rewrite c m gSource

Promote a rewrite on Type.

promoteCoercionR :: (Monad m, Injection Coercion g) => Rewrite c m Coercion -> Rewrite c m gSource

Promote a rewrite on Coercion.

BiRewrite Promotions

promoteExprBiR :: (Monad m, Injection CoreExpr g) => BiRewrite c m CoreExpr -> BiRewrite c m gSource

Promote a bidirectional rewrite on CoreExpr.