GHC/Using rules
< GHC
Using Rules in GHC
GHC's rewrite rules (invoked by the RULES pragma) offer a powerful way to optimise your program. This page is a place for people who use rewrite rules to collect thoughts about how to use them.
If you aren't already familiar with RULES, read this stuff first:
- The relevant section of the GHC user manual
- Playing by the rules: rewriting as a practical optimisation technique in GHC. This paper, from the 2001 Haskell workshop, describes the idea of rewrite rules.
Advice about using rewrite rules
- Remember to use the flag -fglasgow-exts and the optimisation flag -O
- Use the flag -ddump-simpl-stats to see how many rules actually fired.
- For even more detail use -ddump-simpl-stats -ddump-simpl-iterations to see the core code at each iteration of the simplifer. Note that this produces lots of output so you'll want to direct the output to a file or pipe it to less. Looking at the output of this can help you figure out why rules are not firing when you expect them to do so.
- You need to be careful that your identifiers aren't inlined before your RULES have a chance to fire. To control this we add an INLINE [1] pragma to identifiers we want to match in rules, to ensure they haven't disappeared by the time the rule matching comes around.