imperative-edsl-0.4.1: Deep embedding of imperative programs with code generation

Safe HaskellNone
LanguageHaskell2010

Language.Embedded.Expression

Description

Interface for evaluation and compilation of pure expressions

Synopsis

Documentation

type VarId = Integer Source

Variable identifier

type family VarPred exp :: * -> Constraint Source

Constraint on the types of variables in a given expression language

Instances

class EvalExp exp where Source

General interface for evaluating expressions

Methods

litExp :: VarPred exp a => a -> exp a Source

Literal expressions

evalExp :: exp a -> a Source

Evaluation of (closed) expressions

Instances

class CompExp exp where Source

General interface for compiling expressions

Minimal complete definition

varExp, compExp, (compType | compTypeP | compTypePP | compTypePP2)

Methods

varExp :: VarPred exp a => VarId -> exp a Source

Variable expressions

compExp :: MonadC m => exp a -> m Exp Source

Compilation of expressions

NOTE: It is assumed that free variables in the expression are rendered as vIII, where III is the variable identifier.

compType :: forall m a. (MonadC m, VarPred exp a) => exp a -> m Type Source

Extract expression type

compTypeP :: forall proxy m a. (MonadC m, VarPred exp a) => proxy (exp a) -> m Type Source

Extract expression type

compTypePP :: forall proxy1 proxy2 m a. (MonadC m, VarPred exp a) => proxy1 exp -> proxy2 a -> m Type Source

Extract expression type

compTypePP2 :: forall proxy proxy1 proxy2 m a. (MonadC m, VarPred exp a) => proxy exp -> proxy1 (proxy2 a) -> m Type Source

Extract expression type

Instances

freshVar :: forall exp m a. (CompExp exp, VarPred exp a, MonadC m) => m (exp a, Id) Source

Create and declare a fresh variable and return its name

freshVar_ :: forall exp m a. (CompExp exp, VarPred exp a, MonadC m) => m (exp a) Source

Create and declare a fresh variable