[Haskell-cafe] Proposal: (.:) operator in base.
David Feuer
david.feuer at gmail.com
Sat Aug 20 17:29:37 UTC 2016
On Fri, Aug 19, 2016 at 10:38 PM, David Menendez <dave at zednenem.com> wrote:
> 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
More information about the Haskell-Cafe
mailing list