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

Safe HaskellNone
LanguageHaskell2010

Language.Embedded.Expression

Description

Interface to pure expressions

Synopsis

Documentation

type VarId = String Source #

Variable identifier

class FreeExp exp where Source #

Expressions that support injection of constants and named variables

Minimal complete definition

constExp, varExp

Associated Types

type FreePred exp :: * -> Constraint Source #

Constraint on the types of constants and variables in an expression language

Methods

constExp :: FreePred exp a => a -> exp a Source #

Inject a constant value

varExp :: FreePred exp a => VarId -> exp a Source #

Inject a named variable

Instances

FreeExp CExp Source # 

Associated Types

type FreePred (CExp :: * -> *) :: * -> Constraint Source #

Methods

constExp :: FreePred CExp a => a -> CExp a Source #

varExp :: FreePred CExp a => VarId -> CExp a Source #

data Val a Source #

Value

Constructors

ValComp VarId

Symbolic value

ValRun a

Concrete value

Instances

ToIdent (Val a) Source # 

Methods

toIdent :: Val a -> SrcLoc -> Id #

valToExp :: (FreeExp exp, FreePred exp a) => Val a -> exp a Source #

Convert a value to an expression

class FreeExp exp => EvalExp exp where Source #

Expressions that support evaluation

Minimal complete definition

evalExp

Methods

evalExp :: exp a -> a Source #

Evaluation of a closed expression

Instances

EvalExp CExp Source # 

Methods

evalExp :: CExp a -> a Source #