Module FlatCurry.Annotated.TypeSubst

Type substitutions on type-annotated AnnotatedFlatCurry

Author: Bjoern Peemoeller

Version: September 2014

Summary of exported operations:

showAFCSubst :: FM Int TypeExpr -> String   
emptyAFCSubst :: FM Int TypeExpr   
The empty substitution
lookupAFCSubst :: FM Int TypeExpr -> Int -> Maybe TypeExpr   
Searches the substitution for a mapping from the given variable index to a term.
substFunc :: FM Int TypeExpr -> AFuncDecl TypeExpr -> AFuncDecl TypeExpr   
Applies a substitution to a function.
substRule :: FM Int TypeExpr -> ARule TypeExpr -> ARule TypeExpr   
Applies a substitution to a type expression.
substExpr :: FM Int TypeExpr -> AExpr TypeExpr -> AExpr TypeExpr   
Applies a substitution to a type expression.
substSnd :: FM Int TypeExpr -> (a,TypeExpr) -> (a,TypeExpr)   
substBranch :: FM Int TypeExpr -> ABranchExpr TypeExpr -> ABranchExpr TypeExpr   
Applies a substitution to a branch expression.
substPattern :: FM Int TypeExpr -> APattern TypeExpr -> APattern TypeExpr   
Applies a substitution to a pattern.
subst :: FM Int TypeExpr -> TypeExpr -> TypeExpr   
Looks up a type in a substitution and converts the resulting Term to a TypeExpr.

Exported datatypes:


AFCSubst

The (abstract) data type for substitutions on TypeExpr.

Type synonym: AFCSubst = FM TVarIndex TypeExpr


Exported operations:

showAFCSubst :: FM Int TypeExpr -> String   

emptyAFCSubst :: FM Int TypeExpr   

The empty substitution

lookupAFCSubst :: FM Int TypeExpr -> Int -> Maybe TypeExpr   

Searches the substitution for a mapping from the given variable index to a term.

Example call:
(lookupAFCSubst subst i)
Parameters:
  • subst : the substitution to search
  • i : the index to search for
Returns:
the found type expression or Nothing

substFunc :: FM Int TypeExpr -> AFuncDecl TypeExpr -> AFuncDecl TypeExpr   

Applies a substitution to a function.

Example call:
(substFunc sub f)
Parameters:
  • sub : the substitution
  • f : the function
Returns:
the function with the substitution applied

substRule :: FM Int TypeExpr -> ARule TypeExpr -> ARule TypeExpr   

Applies a substitution to a type expression.

Example call:
(substRule sub r)
Parameters:
  • sub : the substitution
  • r : the rule
Returns:
the rule with the substitution applied

substExpr :: FM Int TypeExpr -> AExpr TypeExpr -> AExpr TypeExpr   

Applies a substitution to a type expression.

Example call:
(substExpr sub ex)
Parameters:
  • sub : the substitution
  • ex : the expression
Returns:
the expression with the substitution applied

substSnd :: FM Int TypeExpr -> (a,TypeExpr) -> (a,TypeExpr)   

substBranch :: FM Int TypeExpr -> ABranchExpr TypeExpr -> ABranchExpr TypeExpr   

Applies a substitution to a branch expression.

Example call:
(substBranch sub b)
Parameters:
  • sub : the substitution
  • b : the branch
Returns:
the branch with the substitution applied

substPattern :: FM Int TypeExpr -> APattern TypeExpr -> APattern TypeExpr   

Applies a substitution to a pattern.

Example call:
(substPattern sub p)
Parameters:
  • sub : the substitution
  • p : the pattern
Returns:
the pattern with the substitution applied

subst :: FM Int TypeExpr -> TypeExpr -> TypeExpr   

Looks up a type in a substitution and converts the resulting Term to a TypeExpr. Returns a given default value if the lookup fails.

Example call:
(subst t e sub)
Parameters:
  • t : the type to look up
  • e : the default value
  • sub : the substitution to search in
Returns:
either the looked-up and converted type or the default type