Class op rules

Christiaan Baaij christiaan.baaij at gmail.com
Fri Mar 6 15:21:54 UTC 2020


Hello,

The other day I was experimenting with RULES and got this warning:

src/Clash/Sized/Vector.hs:2159:11: warning: [-Winline-rule-shadowing]
    Rule "map Pack" may never fire
      because rule "Class op pack" for ‘pack’ might fire first
    Probable fix: add phase [n] or [~n] to the competing rule
     |
2159 | {-# RULES "map Pack" map pack = id #-}

The warning seems to suggests two things:
1. "Class op" -> "dictionary projection" are implemented as rewrite rules
and executed the same way as other user-defined RULES
2. These rules run first, and you cannot run anything before them

Now my question is, is 1. actually true? or is that warning just a (white)
lie?
If 1. is actually true, would there be any objections to adding a "-1"
phase: where RULES specified to start from phase "-1" onward fire before
any of the Class op rules.
I'm quite willing to implement the above if A) Class op rules are actually
implemented as builtin RULES; B) there a no objections to this "-1" phase.

Thanks,
Christiaan
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/ghc-devs/attachments/20200306/39947d36/attachment.html>


More information about the ghc-devs mailing list