Arrow Development

Thomas Bereknyei tomberek at
Fri Feb 20 07:58:14 UTC 2015

I am looking at the proc notation de-sugar and I see results like this when
using a Free Arrow (mostly copied from [1]):
line2 = proc n -> do
  Effect getURLSum *** Effect getURLSum -< n

Seq [Pure ] (Seq [Pure ] (Seq [Pure ] (Seq [Pure ](Par <Effect >
{Effect } ) ) ) )

while this is so much simpler:
line2 = Effect getURLSum *** Effect getURLSum

Par <Effect > {Effect }

Those `Seq [Pure ]` sequences come from application of (.) and I have
noticed many similar inefficiencies in the Arrow preprocessor. Eventually
the goal would be to optimize when possible, for example I started looking
into this in order to use `concurrently` for (***) when in IO.

There was a rewrite mentioned here [2]. The deSugar/DsArrows.hs [3] looks
convoluted. Any progress or work needed? Or are Arrows not used much and
not worth the effort?


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <>

More information about the ghc-devs mailing list