Module AbstractCurry.Build

This library provides some useful operations to write programs that generate AbstractCurry programs in a more compact and readable way.

Version: September 2024

Summary of exported operations:

simpleCurryProg :: String -> [String] -> [CTypeDecl] -> [CFuncDecl] -> [COpDecl] -> CurryProg   
Constructs a simple CurryProg without type classes and instances.
simpleInstanceDecl :: (String,String) -> CTypeExpr -> [CFuncDecl] -> CInstanceDecl   
Constructs a simple class instance for a given type and without a class constraint.
simpleCCons :: (String,String) -> CVisibility -> [CTypeExpr] -> CConsDecl   
Constructs a simple constructor declaration without quantified type variables and type class constraints.
applyTC :: (String,String) -> [CTypeExpr] -> CTypeExpr   
A type application of a qualified type constructor name to a list of argument types.
(~>) :: CTypeExpr -> CTypeExpr -> CTypeExpr   
A function type.
baseType :: (String,String) -> CTypeExpr   
A base type.
listType :: CTypeExpr -> CTypeExpr   
Constructs a list type from an element type.
tupleType :: [CTypeExpr] -> CTypeExpr   
Constructs a tuple type from list of component types.
ioType :: CTypeExpr -> CTypeExpr   
Constructs an IO type from a type.
maybeType :: CTypeExpr -> CTypeExpr   
Constructs a Maybe type from element type.
stringType :: CTypeExpr   
The type expression of the String type.
intType :: CTypeExpr   
The type expression of the Int type.
floatType :: CTypeExpr   
The type expression of the Float type.
boolType :: CTypeExpr   
The type expression of the Bool type.
charType :: CTypeExpr   
The type expression of the Char type.
unitType :: CTypeExpr   
The type expression of the unit type.
dateType :: CTypeExpr   
The type expression of the Time.CalendarTime type.
emptyClassType :: CTypeExpr -> CQualTypeExpr   
A qualified type with empty class constraints.
singleClassType :: (String,String) -> CTypeExpr -> CTypeExpr -> CQualTypeExpr   
A qualified type with a single class constraint.
singleCConstraint :: (String,String) -> CTypeExpr -> ((String,String),CTypeExpr)   
A class constraint with a single parameter.
cfunc :: (String,String) -> Int -> CVisibility -> CQualTypeExpr -> [CRule] -> CFuncDecl   
Constructs a function declaration from a given qualified function name, arity, visibility, type expression and list of defining rules.
cmtfunc :: String -> (String,String) -> Int -> CVisibility -> CQualTypeExpr -> [CRule] -> CFuncDecl   
Constructs a function declaration from a given comment, qualified function name, arity, visibility, type expression and list of defining rules.
stFunc :: (String,String) -> Int -> CVisibility -> CTypeExpr -> [CRule] -> CFuncDecl   
stCmtFunc :: String -> (String,String) -> Int -> CVisibility -> CTypeExpr -> [CRule] -> CFuncDecl   
simpleRule :: [CPattern] -> CExpr -> CRule   
Constructs a simple rule with a pattern list and an unconditional right-hand side.
simpleRuleWithLocals :: [CPattern] -> CExpr -> [CLocalDecl] -> CRule   
Constructs a simple rule with a pattern list, an unconditional right-hand side, and local declarations.
guardedRule :: [CPattern] -> [(CExpr,CExpr)] -> [CLocalDecl] -> CRule   
Constructs a rule with a possibly guarded right-hand side and local declarations.
noGuard :: CExpr -> (CExpr,CExpr)   
Constructs a guarded expression with the trivial guard.
simpleRhs :: CExpr -> CRhs   
Transforms an expression into a simple unconditional right-hand side.
applyF :: (String,String) -> [CExpr] -> CExpr   
An application of a qualified function name to a list of arguments.
applyE :: CExpr -> [CExpr] -> CExpr   
An application of an expression to a list of arguments.
constF :: (String,String) -> CExpr   
A constant, i.e., an application without arguments.
applyV :: (Int,String) -> [CExpr] -> CExpr   
An application of a variable to a list of arguments.
applyJust :: CExpr -> CExpr   
applyMaybe :: CExpr -> CExpr -> CExpr -> CExpr   
tupleExpr :: [CExpr] -> CExpr   
Constructs a tuple expression from list of component expressions.
ifThenElseExp :: CExpr -> CExpr -> CExpr -> CExpr   
Constructs an if-then-else expression.
letExpr :: [CLocalDecl] -> CExpr -> CExpr   
Constructs a let declaration (with possibly empty local delcarations).
simpleTyped :: CExpr -> CTypeExpr -> CExpr   
Constructs a typed expression from an expression and a simple type.
doExpr :: [CStatement] -> CExpr   
Constructs a do expression.
cBranch :: CPattern -> CExpr -> (CPattern,CRhs)   
Constructs from a pattern and an expression a branch for a case expression.
tuplePattern :: [CPattern] -> CPattern   
Constructs a tuple pattern from list of component patterns.
pVars :: Int -> [CPattern]   
Constructs, for given n, a list of n PVars starting from 0.
pInt :: Int -> CPattern   
Converts an integer into an AbstractCurry expression.
pFloat :: Float -> CPattern   
Converts a float into an AbstractCurry expression.
pChar :: Char -> CPattern   
Converts a character into a pattern.
pNil :: CPattern   
Constructs an empty list pattern.
listPattern :: [CPattern] -> CPattern   
Constructs a list pattern from list of component patterns.
stringPattern :: String -> CPattern   
Converts a string into a pattern representing this string.
list2ac :: [CExpr] -> CExpr   
Converts a list of AbstractCurry expressions into an AbstractCurry representation of this list.
cInt :: Int -> CExpr   
Converts an integer into an AbstractCurry expression.
cFloat :: Float -> CExpr   
Converts a float into an AbstractCurry expression.
cChar :: Char -> CExpr   
Converts a character into an AbstractCurry expression.
string2ac :: String -> CExpr   
Converts a string into an AbstractCurry represention of this string.
toVar :: Int -> CExpr   
Converts an index i into a variable named xi.
cvar :: String -> CExpr   
Converts a string into a variable with index 1.
cpvar :: String -> CPattern   
Converts a string into a pattern variable with index 1.
ctvar :: String -> CTypeExpr   
Converts a string into a type variable with index 1.

Exported operations:

simpleCurryProg :: String -> [String] -> [CTypeDecl] -> [CFuncDecl] -> [COpDecl] -> CurryProg   

Constructs a simple CurryProg without type classes and instances.

Further infos:
  • solution complete, i.e., able to compute all solutions

simpleInstanceDecl :: (String,String) -> CTypeExpr -> [CFuncDecl] -> CInstanceDecl   

Constructs a simple class instance for a given type and without a class constraint. Thus, the instance definition has the form

instance c ty where { ...;fundecl;... }
Further infos:
  • solution complete, i.e., able to compute all solutions

simpleCCons :: (String,String) -> CVisibility -> [CTypeExpr] -> CConsDecl   

Constructs a simple constructor declaration without quantified type variables and type class constraints.

Further infos:
  • solution complete, i.e., able to compute all solutions

applyTC :: (String,String) -> [CTypeExpr] -> CTypeExpr   

A type application of a qualified type constructor name to a list of argument types.

(~>) :: CTypeExpr -> CTypeExpr -> CTypeExpr   

A function type.

Further infos:
  • defined as right-associative infix operator with precedence 9
  • solution complete, i.e., able to compute all solutions

baseType :: (String,String) -> CTypeExpr   

A base type.

Further infos:
  • solution complete, i.e., able to compute all solutions

listType :: CTypeExpr -> CTypeExpr   

Constructs a list type from an element type.

Further infos:
  • solution complete, i.e., able to compute all solutions

tupleType :: [CTypeExpr] -> CTypeExpr   

Constructs a tuple type from list of component types.

ioType :: CTypeExpr -> CTypeExpr   

Constructs an IO type from a type.

Further infos:
  • solution complete, i.e., able to compute all solutions

maybeType :: CTypeExpr -> CTypeExpr   

Constructs a Maybe type from element type.

Further infos:
  • solution complete, i.e., able to compute all solutions

stringType :: CTypeExpr   

The type expression of the String type.

Further infos:
  • solution complete, i.e., able to compute all solutions

intType :: CTypeExpr   

The type expression of the Int type.

Further infos:
  • solution complete, i.e., able to compute all solutions

floatType :: CTypeExpr   

The type expression of the Float type.

Further infos:
  • solution complete, i.e., able to compute all solutions

boolType :: CTypeExpr   

The type expression of the Bool type.

Further infos:
  • solution complete, i.e., able to compute all solutions

charType :: CTypeExpr   

The type expression of the Char type.

Further infos:
  • solution complete, i.e., able to compute all solutions

unitType :: CTypeExpr   

The type expression of the unit type.

Further infos:
  • solution complete, i.e., able to compute all solutions

dateType :: CTypeExpr   

The type expression of the Time.CalendarTime type.

Further infos:
  • solution complete, i.e., able to compute all solutions

emptyClassType :: CTypeExpr -> CQualTypeExpr   

A qualified type with empty class constraints.

Further infos:
  • solution complete, i.e., able to compute all solutions

singleClassType :: (String,String) -> CTypeExpr -> CTypeExpr -> CQualTypeExpr   

A qualified type with a single class constraint. The arguments are the class name, the actual type parameter of the class, and the type expression constrained by the class constraint.

Further infos:
  • solution complete, i.e., able to compute all solutions

singleCConstraint :: (String,String) -> CTypeExpr -> ((String,String),CTypeExpr)   

A class constraint with a single parameter. The arguments are the class name and the type parameter of the class.

Further infos:
  • solution complete, i.e., able to compute all solutions

cfunc :: (String,String) -> Int -> CVisibility -> CQualTypeExpr -> [CRule] -> CFuncDecl   

Constructs a function declaration from a given qualified function name, arity, visibility, type expression and list of defining rules.

Further infos:
  • solution complete, i.e., able to compute all solutions

cmtfunc :: String -> (String,String) -> Int -> CVisibility -> CQualTypeExpr -> [CRule] -> CFuncDecl   

Constructs a function declaration from a given comment, qualified function name, arity, visibility, type expression and list of defining rules.

Further infos:
  • solution complete, i.e., able to compute all solutions

stFunc :: (String,String) -> Int -> CVisibility -> CTypeExpr -> [CRule] -> CFuncDecl   

stCmtFunc :: String -> (String,String) -> Int -> CVisibility -> CTypeExpr -> [CRule] -> CFuncDecl   

simpleRule :: [CPattern] -> CExpr -> CRule   

Constructs a simple rule with a pattern list and an unconditional right-hand side.

Further infos:
  • solution complete, i.e., able to compute all solutions

simpleRuleWithLocals :: [CPattern] -> CExpr -> [CLocalDecl] -> CRule   

Constructs a simple rule with a pattern list, an unconditional right-hand side, and local declarations.

Further infos:
  • solution complete, i.e., able to compute all solutions

guardedRule :: [CPattern] -> [(CExpr,CExpr)] -> [CLocalDecl] -> CRule   

Constructs a rule with a possibly guarded right-hand side and local declarations. A simple right-hand side is constructed if there is only one True condition.

noGuard :: CExpr -> (CExpr,CExpr)   

Constructs a guarded expression with the trivial guard.

Further infos:
  • solution complete, i.e., able to compute all solutions

simpleRhs :: CExpr -> CRhs   

Transforms an expression into a simple unconditional right-hand side.

Further infos:
  • solution complete, i.e., able to compute all solutions

applyF :: (String,String) -> [CExpr] -> CExpr   

An application of a qualified function name to a list of arguments.

applyE :: CExpr -> [CExpr] -> CExpr   

An application of an expression to a list of arguments.

constF :: (String,String) -> CExpr   

A constant, i.e., an application without arguments.

applyV :: (Int,String) -> [CExpr] -> CExpr   

An application of a variable to a list of arguments.

applyJust :: CExpr -> CExpr   

applyMaybe :: CExpr -> CExpr -> CExpr -> CExpr   

tupleExpr :: [CExpr] -> CExpr   

Constructs a tuple expression from list of component expressions.

ifThenElseExp :: CExpr -> CExpr -> CExpr -> CExpr   

Constructs an if-then-else expression.

letExpr :: [CLocalDecl] -> CExpr -> CExpr   

Constructs a let declaration (with possibly empty local delcarations).

simpleTyped :: CExpr -> CTypeExpr -> CExpr   

Constructs a typed expression from an expression and a simple type.

Further infos:
  • solution complete, i.e., able to compute all solutions

doExpr :: [CStatement] -> CExpr   

Constructs a do expression. If the list of statements in the do expression contains a single expression, the do expression is transformed into a simple expression.

cBranch :: CPattern -> CExpr -> (CPattern,CRhs)   

Constructs from a pattern and an expression a branch for a case expression.

Further infos:
  • solution complete, i.e., able to compute all solutions

tuplePattern :: [CPattern] -> CPattern   

Constructs a tuple pattern from list of component patterns.

pVars :: Int -> [CPattern]   

Constructs, for given n, a list of n PVars starting from 0.

pInt :: Int -> CPattern   

Converts an integer into an AbstractCurry expression.

Further infos:
  • solution complete, i.e., able to compute all solutions

pFloat :: Float -> CPattern   

Converts a float into an AbstractCurry expression.

Further infos:
  • solution complete, i.e., able to compute all solutions

pChar :: Char -> CPattern   

Converts a character into a pattern.

Further infos:
  • solution complete, i.e., able to compute all solutions

pNil :: CPattern   

Constructs an empty list pattern.

Further infos:
  • solution complete, i.e., able to compute all solutions

listPattern :: [CPattern] -> CPattern   

Constructs a list pattern from list of component patterns.

Further infos:
  • solution complete, i.e., able to compute all solutions

stringPattern :: String -> CPattern   

Converts a string into a pattern representing this string.

list2ac :: [CExpr] -> CExpr   

Converts a list of AbstractCurry expressions into an AbstractCurry representation of this list.

cInt :: Int -> CExpr   

Converts an integer into an AbstractCurry expression.

Further infos:
  • solution complete, i.e., able to compute all solutions

cFloat :: Float -> CExpr   

Converts a float into an AbstractCurry expression.

Further infos:
  • solution complete, i.e., able to compute all solutions

cChar :: Char -> CExpr   

Converts a character into an AbstractCurry expression.

Further infos:
  • solution complete, i.e., able to compute all solutions

string2ac :: String -> CExpr   

Converts a string into an AbstractCurry represention of this string.

Further infos:
  • solution complete, i.e., able to compute all solutions

toVar :: Int -> CExpr   

Converts an index i into a variable named xi.

cvar :: String -> CExpr   

Converts a string into a variable with index 1.

Further infos:
  • solution complete, i.e., able to compute all solutions

cpvar :: String -> CPattern   

Converts a string into a pattern variable with index 1.

Further infos:
  • solution complete, i.e., able to compute all solutions

ctvar :: String -> CTypeExpr   

Converts a string into a type variable with index 1.

Further infos:
  • solution complete, i.e., able to compute all solutions