GHC-7.8 warning on rules that may not fire

Simon Peyton Jones simonpj at
Mon Mar 17 16:22:27 UTC 2014

The simplifier runs with phase 2, then 1 then 0 (multiple times).

Generally you want to make sure that something does not inline before its RULE can fire.  There are quite a few examples in the base package, if you grep for RULE


| -----Original Message-----
| From: Henning Thielemann [mailto:lemming at]
| Sent: 14 March 2014 17:27
| To: Simon Peyton Jones; GHC Users List
| Subject: Re: GHC-7.8 warning on rules that may not fire
| Am 14.03.2014 18:05, schrieb Simon Peyton Jones:
| > You may think they are fragile, but not as fragile as saying nothing
| > and hoping for the best, which is *super*-fragile. You can't rely on
| > rules to take priority, because the rule only fires if it matches, and
| > it may only match if some other inlining has taken place.  (We tried
| > that originally.)
| Ok, how shall I choose "n" in "INLINE[n]"? Is there a meaning of the
| phase numbers? I guess it is important to adhere to some conventions in
| order to work together with other libraries.
| If I understand correctly I can alter the number of phases with the -
| fsimplifier-phases option - how can I choose phase numbers for INLINE
| that are universally reasonable?

More information about the Glasgow-haskell-users mailing list