Data.Foldable causes missed foldr/build opportunities
Gabriel Gonzalez
gabriel439 at gmail.com
Thu Jul 25 19:55:36 CEST 2013
On 07/25/2013 10:41 AM, Edward Kmett wrote:
> One of the open concerns about it is definitely ensuring that we get
> the fusion opportunities we can.
>
> If you put an INLINE pragma on your Foldable version of each do the
> fusion rules fire after it gets inlined into a call site that uses it
> as a list?
>
I tried both INLINE and INLINABLE and neither causes the fusion rules to
fire. I also tried:
* adding an orphan SPECIALIZE rule for `Data.Foldable.mapM_` in the
module where I defined `each`
* Specializing the type of `each` to consume lists, but still using the
`Foldable` `mapM_`
* Defining a new copy of `each` (using the `Foldable` version) in the
same module as the code that uses it, specializing the type signature to
lists, and trying out INLINE/INLINABLE or no pragma.
None of those causes the rule to fire, either.
> -Edward
>
> On Thu, Jul 25, 2013 at 1:22 PM, Gabriel Gonzalez
> <gabriel439 at gmail.com <mailto:gabriel439 at gmail.com>> wrote:
>
> I'm now in favor of the `Data.Foldable` proposal, but I just
> wanted to mention that the proposal needs to include some extra
> pragma work to ensure that build/foldr optimizations fire. I was
> just experimenting with the following combinator for `pipes`
> trying out the following two versions:
>
> each :: (Monad m) => [a] -> Producer a m ()
> each = mapM yield
>
> each :: (Monad m, Foldable f) => f a -> Producer a m ()
> each = Data.Foldable.mapM yield
>
> When I do a pure `pipes`-based fold over both `Producers`s, the
> version specialized to lists triggers a firing of the build/foldr
> fusion rule and runs about 20% faster. The true improvement for
> `mapM` by itself is probably even greater than that because I
> haven't optimized the folding code yet. The latter version does
> not trigger the rule firing. Either way I'm going to include the
> latter `Foldable` version but I just wanted to mention this
> because I remember people were asking if this would impact fusion
> or not.
>
> _______________________________________________
> Libraries mailing list
> Libraries at haskell.org <mailto:Libraries at haskell.org>
> http://www.haskell.org/mailman/listinfo/libraries
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.haskell.org/pipermail/libraries/attachments/20130725/13602cec/attachment.htm>
More information about the Libraries
mailing list