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

Safe HaskellNone

Language.HERMIT.Primitive.Common

Contents

Description

Note: this module should NOT export externals. It is for common transformations needed by the other primitive modules.

Synopsis

Utility Transformations

applyInContextT :: Translate c m a b -> a -> Translate c m x bSource

Apply a transformation to a value in the current context.

Finding function calls.

callT :: Monad m => Translate c m CoreExpr (CoreExpr, [CoreExpr])Source

Lift GHC's collectArgs

callNameT :: MonadCatch m => Name -> Translate c m CoreExpr (CoreExpr, [CoreExpr])Source

Succeeds if we are looking at an application of given function returning zero or more arguments to which it is applied.

callSaturatedT :: Monad m => Translate c m CoreExpr (CoreExpr, [CoreExpr])Source

Succeeds if we are looking at a fully saturated function call.

callNameG :: MonadCatch m => Name -> Translate c m CoreExpr ()Source

Succeeds if we are looking at an application of given function

callDataConT :: MonadCatch m => Translate c m CoreExpr (DataCon, [Type], [CoreExpr])Source

Succeeds if we are looking at an application of a data constructor.

callDataConNameT :: MonadCatch m => Name -> Translate c m CoreExpr (DataCon, [Type], [CoreExpr])Source

Succeeds if we are looking at an application of a named data constructor.

callsR :: (ExtendPath c Crumb, AddBindings c, MonadCatch m) => Name -> Rewrite c m CoreExpr -> Rewrite c m CoreSource

Apply a rewrite to all applications of a given function in a top-down manner, pruning on success.

callsT :: (ExtendPath c Crumb, AddBindings c, MonadCatch m) => Name -> Translate c m CoreExpr b -> Translate c m Core [b]Source

Apply a translate to all applications of a given function in a top-down manner, pruning on success, collecting the results.

Collecting variables bound at a Node

progIdsT :: (ExtendPath c Crumb, AddBindings c, MonadCatch m) => Translate c m CoreProg [Id]Source

List all identifiers bound at the top-level in a program.

consIdsT :: (ExtendPath c Crumb, AddBindings c, MonadCatch m) => Translate c m CoreProg [Id]Source

List the identifiers bound by the top-level binding group at the head of the program.

consRecIdsT :: (ExtendPath c Crumb, AddBindings c, Monad m) => Translate c m CoreProg [Id]Source

List the identifiers bound by a recursive top-level binding group at the head of the program.

consNonRecIdT :: (ExtendPath c Crumb, AddBindings c, Monad m) => Translate c m CoreProg IdSource

Return the identifier bound by a non-recursive top-level binding at the head of the program.

bindVarsT :: (ExtendPath c Crumb, AddBindings c, MonadCatch m) => Translate c m CoreBind [Var]Source

List all variables bound in a binding group.

nonRecVarT :: (ExtendPath c Crumb, Monad m) => Translate c m CoreBind VarSource

Return the variable bound by a non-recursive let expression.

recIdsT :: (ExtendPath c Crumb, AddBindings c, Monad m) => Translate c m CoreBind [Id]Source

List all identifiers bound in a recursive binding group.

defIdT :: (ExtendPath c Crumb, Monad m) => Translate c m CoreDef IdSource

Return the identifier bound by a recursive definition.

lamVarT :: (ExtendPath c Crumb, AddBindings c, Monad m) => Translate c m CoreExpr VarSource

Return the variable bound by a lambda expression.

letVarsT :: (ExtendPath c Crumb, AddBindings c, MonadCatch m) => Translate c m CoreExpr [Var]Source

List the variables bound by a let expression.

letRecIdsT :: (ExtendPath c Crumb, AddBindings c, Monad m) => Translate c m CoreExpr [Id]Source

List the identifiers bound by a recursive let expression.

letNonRecVarT :: (ExtendPath c Crumb, AddBindings c, Monad m) => Translate c m CoreExpr VarSource

Return the variable bound by a non-recursive let expression.

caseVarsT :: (ExtendPath c Crumb, AddBindings c, Monad m) => Translate c m CoreExpr [Var]Source

List all variables bound by a case expression (in the alternatives and the wildcard binder).

caseWildIdT :: (ExtendPath c Crumb, AddBindings c, Monad m) => Translate c m CoreExpr IdSource

Return the case wildcard binder.

caseAltVarsT :: (ExtendPath c Crumb, AddBindings c, Monad m) => Translate c m CoreExpr [[Var]]Source

List the variables bound by all alternatives in a case expression.

altVarsT :: (ExtendPath c Crumb, AddBindings c, Monad m) => Translate c m CoreAlt [Var]Source

List the variables bound by a case alternative.

Finding variables bound in the Context

boundVarsT :: (BoundVars c, Monad m) => Translate c m a (Set Var)Source

Lifted version of boundVars.

findBoundVarT :: (BoundVars c, MonadCatch m) => Name -> Translate c m a VarSource

Find the unique variable bound in the context that matches the given name, failing if it is not unique.

findIdT :: (BoundVars c, HasGlobalRdrEnv c, HasDynFlags m, MonadThings m, MonadCatch m) => Name -> Translate c m a IdSource

Lookup the name in the context first, then, failing that, in GHC's global reader environment.

Miscallaneous

wrongExprForm :: String -> StringSource

Constructs a common error message. Argument String should be the desired form of the expression.

nodups :: Eq a => [a] -> BoolSource

Determine if a list contains no duplicated elements.