indigo-0.6.0: Convenient imperative eDSL over Lorentz.
Safe HaskellSafe-Inferred
LanguageHaskell2010

Indigo.Backend.Case

Description

Backend machinery for cases.

Synopsis

Documentation

caseRec Source #

Arguments

:: forall dt inp ret clauses. CaseCommon dt ret clauses 
=> Expr dt 
-> clauses 
-> RetVars ret

Variable(s) that will be assigned to the resulting value(s)

-> IndigoState inp (RetOutStack ret ++ inp) 

A case statement for indigo. See examples for a sample usage.

entryCaseRec Source #

Arguments

:: forall dt entrypointKind inp ret clauses. (CaseCommon dt ret clauses, DocumentEntrypoints entrypointKind dt) 
=> Proxy entrypointKind 
-> Expr dt 
-> clauses 
-> RetVars ret

Variable(s) that will be assigned to the resulting value(s)

-> IndigoState inp (RetOutStack ret ++ inp) 

case_ for pattern-matching on parameter.

entryCaseSimpleRec Source #

Arguments

:: forall dt inp ret clauses. (CaseCommon dt ret clauses, DocumentEntrypoints PlainEntrypointsKind dt, NiceParameterFull dt, RequireFlatParamEps dt) 
=> Expr dt 
-> clauses 
-> RetVars ret

Variable(s) that will be assigned to the resulting value(s)

-> IndigoState inp (RetOutStack ret ++ inp) 

entryCase_ for contracts with flat parameter.

data IndigoCaseClauseL ret (param :: CaseClauseParam) Source #

This type is analogous to the CaseClauseL type but instead of wrapping a Lorentz instruction, this wraps an Indigo value with the same input/output types.

Instances

Instances details
(name ~ AppendSymbol "c" ctor, KnownValue x) => CaseArrow name (IndigoClause x ret) (IndigoCaseClauseL ret ('CaseClauseParam ctor ('OneField x))) Source # 
Instance details

Defined in Indigo.Backend.Case

Methods

(/->) :: Label name -> IndigoClause x ret -> IndigoCaseClauseL ret ('CaseClauseParam ctor ('OneField x)) #

data IndigoClause x ret where Source #

Constructors

IndigoClause 

Fields

Instances

Instances details
(name ~ AppendSymbol "c" ctor, KnownValue x) => CaseArrow name (IndigoClause x ret) (IndigoCaseClauseL ret ('CaseClauseParam ctor ('OneField x))) Source # 
Instance details

Defined in Indigo.Backend.Case

Methods

(/->) :: Label name -> IndigoClause x ret -> IndigoCaseClauseL ret ('CaseClauseParam ctor ('OneField x)) #

type CaseCommonF f dt ret clauses = (InstrCaseC dt, RMap (CaseClauses dt), clauses ~ Rec (f ret) (CaseClauses dt), ScopeCodeGen ret) Source #

This constraint is shared by all case* functions. Including some outside this module.