[GHC] #10595: BuiltinRules override other rules in some cases.
GHC
ghc-devs at haskell.org
Tue Jul 7 07:51:57 UTC 2015
#10595: BuiltinRules override other rules in some cases.
-------------------------------------+-------------------------------------
Reporter: gjsimms | Owner:
Type: bug | Status: new
Priority: high | Milestone:
Component: Compiler | Version: 7.11
Resolution: | Keywords:
Operating System: Unknown/Multiple | Architecture:
Type of failure: None/Unknown | Unknown/Multiple
Blocked By: | Test Case:
Related Tickets: | Blocking:
| Differential Revisions:
-------------------------------------+-------------------------------------
Comment (by simonpj):
GHC has a crude-but-effective way to control the order of application of
rules, called "phases". See the reference to phase control in
[https://downloads.haskell.org/~ghc/latest/docs/html/users_guide/rewrite-
rules.html 7.23.1 in the manual].
Phases count down; currently 2, 1, 0.
Currently, though, a class-method has a built-in rule (selection from
dictionary) which is always active. There is no way for the user to
override this, to make it active in (say) phase 1 and later. If you could,
that would solve your problem.
The only straightforward solution I can see is to make the built-in rule
for class methods inactive in phase 2, so that user-written rules take
precedence. The trouble with this is that it will delay the moment at
which the per-instance functions (which may have rules of their own)
become visible.
Rather than attempt a change with global consequences, I suggest that you
simply make a new intermediate function, just as you have done with
`ida'`. Instead of NOINLINE you can say `INLINE [1]` which will inline it
in phase 1. Now write your rules for `ida'`.
This has the effect of delaying the built-in class-method rule for `ida`
without affecting any other functions.
I'll add a paragraph to the user manual about this. And I'll close this as
wont-fix, because there is a good workaround and no obviously better
design.
Simon
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/10595#comment:4>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list