Types for representing ICurry programs
Author: Marc Andre Wittorf
An Extended assignment
Type synonym: IEAssign = (IVarIndex,IEExpr)
An Extended module
Constructors:
IEProg
:: String -> [String] -> [IEDataType] -> [IEFunction] -> IEProg
Type synonym: IEQName = (IQName,Int)
An Extended visibility
Constructors:
Public
:: IEVisibility
: Visible and usable from other modules
Private
:: IEVisibility
: Invisible and not usable from other modules
An Extended data type
Type synonym: IEDataType = (IEQName,IEVisibility,[ITVarIndex],[IEConstructor])
An Extended constructor
Constructors:
IEConstructor
:: IEQName -> IEVisibility -> [IETExpr] -> IEConstructor
An Extended type expression
Constructors:
IETVar
:: ITVarIndex -> IETExpr
: a type argument
IETFunc
:: IETExpr -> IETExpr -> IETExpr
: a functional type
IETCons
:: IEQName -> [IETExpr] -> IETExpr
: a type application
An Extended function
Constructors:
IEFunction
:: IEQName -> IEVisibility -> IEFuncBody -> IEFunction
An Extended function's behavior
Constructors:
IEExternal
:: IArity -> String -> IEFuncBody
: the function is externally defined
IEFuncBody
:: [IVarIndex] -> IEBlock -> IEFuncBody
: the function is defined here
An Extended block
Constructors:
IESimpleBlock
:: [IEAssign] -> IEExpr -> IEBlock
: unconditional evaluation
IECaseConsBlock
:: [IEAssign] -> IVarIndex -> [IEConsBranch] -> IEBlock
: conditional evaluation over constructor terms
IECaseLitBlock
:: [IEAssign] -> IVarIndex -> [IELitBranch] -> IEBlock
: conditional evaluation over literals
An Extended branch over constructors
Constructors:
An Extended branch over literals
Constructors:
An Extended expression
Constructors:
IEVar
:: IVarIndex -> IEExpr
: a variable
IELit
:: ILiteral -> IEExpr
: a literal
IEFCall
:: IEQName -> [IEExpr] -> IEExpr
: a function call
IECCall
:: IEQName -> [IEExpr] -> IEExpr
: a constructor call
IEOr
:: [IEExpr] -> IEExpr
: -deterministic choice