GHC.Core.Rules
Functions for collecting together and applying rewrite rules to a module.
The CoreRule
datatype itself is declared elsewhere.
Constructing
mkRuleBase :: [CoreRule] -> RuleBase Source #
pprRuleBase :: RuleBase -> SDoc Source #
Checking rule applications
Arguments
:: RuleOpts | Rule options |
-> CompilerPhase | Rule activation test |
-> String | Rule pattern |
-> (Id -> [CoreRule]) | Rules for an Id |
-> CoreProgram | Bindings to check in |
-> SDoc | Resulting check message |
Report partial matches for rules beginning with the specified string for the purposes of error reporting
Manipulating RuleInfo
rules
Misc. CoreRule helpers
rulesOfBinds :: [CoreBind] -> [CoreRule] Source #
Gather all the rules for locally bound identifiers from the supplied bindings
pprRulesForUser :: [CoreRule] -> SDoc Source #
lookupRule :: RuleOpts -> InScopeEnv -> (Activation -> Bool) -> Id -> [CoreExpr] -> [CoreRule] -> Maybe (CoreRule, CoreExpr) Source #
The main rule matching function. Attempts to apply all (active) supplied rules to this instance of an application in a given context, returning the rule applied and the resulting expression if successful.
mkRule :: Module -> Bool -> Bool -> RuleName -> Activation -> Name -> [CoreBndr] -> [CoreExpr] -> CoreExpr -> CoreRule Source #
roughTopNames :: [CoreExpr] -> [Maybe Name] Source #
Find the "top" free names of several expressions. Such names are either:
- The function finally being applied to in an application chain (if that name is a GlobalId: see GHC.Types.Var), or
- The
TyCon
if the expression is aExpr
This is used for the fast-match-check for rules; if the top names don't match, the rest can't
initRuleOpts :: DynFlags -> RuleOpts Source #
Initialize RuleOpts from DynFlags