| |||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||
| Description | |||||||||||||||||||||||||||||||||
| Functions for collecting together and applying rewrite rules to a module. The CoreRule datatype itself is declared elsewhere. | |||||||||||||||||||||||||||||||||
| Synopsis | |||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||
| RuleBase | |||||||||||||||||||||||||||||||||
| type RuleBase = NameEnv [CoreRule] | |||||||||||||||||||||||||||||||||
| Gathers a collection of CoreRules. Maps (the name of) an Id to its rules | |||||||||||||||||||||||||||||||||
| Constructing | |||||||||||||||||||||||||||||||||
| emptyRuleBase :: RuleBase | |||||||||||||||||||||||||||||||||
| mkRuleBase :: [CoreRule] -> RuleBase | |||||||||||||||||||||||||||||||||
| extendRuleBaseList :: RuleBase -> [CoreRule] -> RuleBase | |||||||||||||||||||||||||||||||||
| unionRuleBase :: RuleBase -> RuleBase -> RuleBase | |||||||||||||||||||||||||||||||||
| pprRuleBase :: RuleBase -> SDoc | |||||||||||||||||||||||||||||||||
| Checking rule applications | |||||||||||||||||||||||||||||||||
| ruleCheckProgram | |||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||
| Manipulating SpecInfo rules | |||||||||||||||||||||||||||||||||
| mkSpecInfo :: [CoreRule] -> SpecInfo | |||||||||||||||||||||||||||||||||
| Make a SpecInfo containing a number of CoreRules, suitable for putting into an IdInfo | |||||||||||||||||||||||||||||||||
| extendSpecInfo :: SpecInfo -> [CoreRule] -> SpecInfo | |||||||||||||||||||||||||||||||||
| addSpecInfo :: SpecInfo -> SpecInfo -> SpecInfo | |||||||||||||||||||||||||||||||||
| addIdSpecialisations :: Id -> [CoreRule] -> Id | |||||||||||||||||||||||||||||||||
| Misc. CoreRule helpers | |||||||||||||||||||||||||||||||||
| rulesOfBinds :: [CoreBind] -> [CoreRule] | |||||||||||||||||||||||||||||||||
| Gather all the rules for locally bound identifiers from the supplied bindings | |||||||||||||||||||||||||||||||||
| getRules :: RuleBase -> Id -> [CoreRule] | |||||||||||||||||||||||||||||||||
| pprRulesForUser :: [CoreRule] -> SDoc | |||||||||||||||||||||||||||||||||
| lookupRule :: (Activation -> Bool) -> InScopeSet -> Id -> [CoreExpr] -> [CoreRule] -> Maybe (CoreRule, CoreExpr) | |||||||||||||||||||||||||||||||||
| 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. | |||||||||||||||||||||||||||||||||
| mkLocalRule :: RuleName -> Activation -> Name -> [CoreBndr] -> [CoreExpr] -> CoreExpr -> CoreRule | |||||||||||||||||||||||||||||||||
| Used to make CoreRule for an Id defined in the module being compiled. See also CoreRule | |||||||||||||||||||||||||||||||||
| roughTopNames :: [CoreExpr] -> [Maybe Name] | |||||||||||||||||||||||||||||||||
Find the "top" free names of several expressions. Such names are either: 1. The function finally being applied to in an application chain (if that name is a GlobalId: see Var), or 2. The TyCon if the expression is a Type This is used for the fast-match-check for rules; if the top names don't match, the rest can't | |||||||||||||||||||||||||||||||||
| Produced by Haddock version 2.7.2 | |||||||||||||||||||||||||||||||||