hermit-0.1.4.0: Haskell Equational Reasoning Model-to-Implementation Tunnel

Safe HaskellNone

Language.HERMIT.Primitive.AlphaConversion

Contents

Synopsis

Alpha-Renaming and Shadowing

externals :: [External]Source

Externals for alpha-renaming.

Alpha-Renaming

alpha :: RewriteH CoreSource

Alpha rename any bindings at this node. Note: does not rename case alternatives unless invoked on the alternative.

alphaLam :: Maybe Name -> RewriteH CoreExprSource

Alpha rename a lambda binder. Optionally takes a suggested new name.

alphaCaseBinder :: Maybe Name -> RewriteH CoreExprSource

Alpha rename a case binder. Optionally takes a suggested new name.

alphaAltIds :: [Id] -> RewriteH CoreAltSource

Rename the specified identifiers in a case alternative.

alphaAlt :: RewriteH CoreAltSource

Rename all identifiers bound in a case alternative.

alphaCase :: RewriteH CoreExprSource

Rename all identifiers bound in a case expression.

alphaLetVars :: [Var] -> RewriteH CoreExprSource

Rename the specified variables bound in a let.

alphaLetRecIds :: [Id] -> RewriteH CoreExprSource

Rename the specified identifiers bound in a recursive let.

alphaLetOne :: Maybe Name -> RewriteH CoreExprSource

Rename the identifier bound in a let with a single bound identifier. Optionally takes a suggested new name.

alphaLet :: RewriteH CoreExprSource

Rename all identifiers bound in a Let.

alphaConsOne :: Maybe Name -> RewriteH CoreProgSource

Rename the identifier bound in a top-level binder with a single bound identifier. Optionally takes a suggested new name.

alphaCons :: RewriteH CoreProgSource

Rename all identifiers bound in a Let.

Shadow Detection and Unshadowing

unshadow :: RewriteH CoreSource

Rename local variables with manifestly unique names (x, x0, x1, ...). Does not rename top-level definitions (though this may change in the future).

visibleVarsT :: TranslateH CoreExpr [Var]Source

List all visible identifiers (in the expression or the context).

freshNameGenT :: Maybe Name -> TranslateH CoreExpr (String -> String)Source

If a name is provided replace the string with that, otherwise modify the string making sure to not clash with any visible variables.

freshNameGenAvoiding :: Maybe Name -> [Var] -> String -> StringSource

A generalisation of freshNameGen that operates on any node, but only avoids name clashes with the results of the argument translation.

replaceVarR :: (Injection a Core, Generic a ~ Core) => Var -> Var -> RewriteH aSource

Replace all occurrences of a specified variable. Arguments are the variable to replace and the replacement variable, respectively.