X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=compiler%2FcoreSyn%2FCoreSyn.lhs;h=4ec954ce6a5b6282abc0438cb7ecb5aeecc3050b;hb=bf2f000a552e025ec156010d52aee282bdfcf7a4;hp=d89f542dc9a12c9c43dd1a323a6bed45111f8406;hpb=eb2bf7ad9f967861da2e19ff71a80428c7c2df28;p=ghc-hetmet.git diff --git a/compiler/coreSyn/CoreSyn.lhs b/compiler/coreSyn/CoreSyn.lhs index d89f542..4ec954c 100644 --- a/compiler/coreSyn/CoreSyn.lhs +++ b/compiler/coreSyn/CoreSyn.lhs @@ -54,7 +54,6 @@ import Var import Type import Coercion import Name -import OccName import Literal import DataCon import BasicTypes @@ -219,14 +218,23 @@ data CoreRule -- Locality ru_local :: Bool -- The fn at the head of the rule is -- defined in the same module as the rule + -- and is not an implicit Id (like a record sel + -- class op, or data con) + -- NB: ru_local is *not* used to decide orphan-hood + -- c.g. MkIface.coreRuleToIfaceRule } | BuiltinRule { -- Built-in rules are used for constant folding ru_name :: RuleName, -- and suchlike. It has no free variables. ru_fn :: Name, -- Name of the Id at -- the head of this rule - ru_nargs :: Int, -- Number of args that ru_try expects + ru_nargs :: Int, -- Number of args that ru_try expects, + -- including type args ru_try :: [CoreExpr] -> Maybe CoreExpr } + -- This function does the rewrite. It given too many + -- arguments, it simply discards them; the returned CoreExpr + -- is just the rewrite of ru_fn applied to the first ru_nargs args + -- See Note [Extra args in rule matching] in Rules.lhs isBuiltinRule (BuiltinRule {}) = True isBuiltinRule _ = False