so i did some poking around see eg https://gitlab.haskell.org/ghc/ghc/blob/4898df1cc25132dc9e2599d4fa4e1bbc9423cda5/compiler/basicTypes/BasicTypes.hs#L1187-1207 , and at the moment, the simplifier phase number ordering internally (in order from first to last)
"Initial phase" --- essentially positive infinity .... -- currently we can add new phases here 2 1 0 ------- This actually surprised me, as i've always (at least from how rules are usually written in eg vector) thought it was counting UP! @Christiaan ... so we'd need a Pre initial phase count? that happens before Initial phase? On Fri, Mar 6, 2020 at 10:22 AM Christiaan Baaij <[email protected]> wrote: > 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 > > _______________________________________________ > ghc-devs mailing list > [email protected] > http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs >
_______________________________________________ ghc-devs mailing list [email protected] http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs
