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
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?
-Tom