Extending fold/build fusion

Joachim Breitner mail at joachim-breitner.de
Fri Jan 31 09:18:17 UTC 2014


Dear Akio,

Am Freitag, den 31.01.2014, 16:54 +0900 schrieb Akio Takano:
> > Can you implement build via buildW, so that existing code like
> >   "map"  [~1] forall f xs. map f xs = build (\c n -> foldr (mapFB c f) n xs)
> > can be used unmodified? But probably not... but that would mean a
> > noticeable incompatibility and a burden on library authors using list
> > fusion.
> 
> You can implement build in terms of buildW. However any list producer
> defined using that definition of build would produce good code if the
> final consumer is a left fold. The resulting code will be in CPS. On
> the other hand, I imagine that if we also annotate foldl with oneShot,
> this problem may become less severe.

Hmm, I guess my question was not precise enough. Let me rephrase: To
what extend can you provide the exsting foldr/build API _without_ losing
the advantages of your approach?

Or put differently: Could you add a section to the wiki that serves as a
migration guide to those who want to port their producers and consumers
to your system, without having to fully understand what’s going on?


Another thing that would be very interesting: Your framework seems to be
quite general: Are there other useful worker-wrapper-transformations
that one would possibly want to apply to a fused computations, besides
the one that makes foldl work well? Other examples of
w/w-transformations in GHC include
 * Unboxing of parameters
 * Unboxing of return values, returning multiple values
but maybe you can think of other interesting examples.

Am I right that the _consumer_ of a fused computation decides which
worker-wrapper pair to use?


I still quite like the approach, mostly because it does so well for
lists. I still have to fully grok it, though :-)

Greetings,
Joachim


-- 
Joachim Breitner
  e-Mail: mail at joachim-breitner.de
  Homepage: http://www.joachim-breitner.de
  Jabber-ID: nomeata at joachim-breitner.de

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 181 bytes
Desc: This is a digitally signed message part
URL: <http://www.haskell.org/pipermail/ghc-devs/attachments/20140131/3cb0a681/attachment.sig>


More information about the ghc-devs mailing list