
On Fri, Aug 19, 2016 at 10:38 PM, David Menendez
Any RULEs involving Prelude’s (.) would need to be copied as well.
There aren't any, and if there are any then they're almost certainly broken. The INLINE pragma on (.) isn't marked with a simplifier phase, so it will be inlined almost immediately when optimization begins, as long as it has at least two arguments. There is no time for rules involving it to take effect. Rewrite rules end up working with the inlined version. For example, Data.Sequence has a rule saying forall f g xs . fmapSeq f (fmapSeq g xs) = fmapSeq (f . g) xs So if you write fmap f . fmap g for sequences, this will specialize to fmapSeq f . fmapSeq g and inline to \xs -> fmapSeq f (fmapSeq g xs) at which point the rewrite rule will fire, changing it to \xs -> fmapSeq (f . g) xs This, in turn, will inline as well, to \xs -> fmapSeq (\x -> f (g x)) xs