<p dir="ltr">Thomas, </p>
<p dir="ltr">I'd be very careful mixing effectful arrows with the CCA framework. Effectful arrows are not necessarily commutative, so the CCA transformations may be invalid.</p>
<p dir="ltr">I did something very similar a couple years ago, by creating an arrow instance that generated TH expressions.  IME the ghc optimizer handled it extremely well, and no extra optimizations were necessary.</p>
<p dir="ltr">John L.</p>

<br><div class="gmail_quote">On 14:43, Mon, Mar 2, 2015 Justin Bailey <<a href="mailto:jgbailey@gmail.com" target="_blank">jgbailey@gmail.com</a>> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Thomas,<br>
<br>
I did some stuff with Hoopl a few years ago as part of my Master's<br>
thesis ("Using Dataflow Optimization Techniques with a Monadic<br>
Intermediate Language"). In Chapter 3 ("The Hoopl Library"), I wrote<br>
up an overview of Hoopl and work through a new example (new at the<br>
time, at least).<br>
<br>
You can download my thesis from <a href="http://mil.codeslower.com" target="_blank">http://mil.codeslower.com</a>. The example<br>
code from that chapter is available at<br>
<a href="https://github.com/m4dc4p/mil/blob/master/thesis/DeadCodeC.lhs" target="_blank">https://github.com/m4dc4p/mil/<u></u><u></u>blob/master/thesis/DeadCodeC.<u></u>l<u></u>hs</a>. No<br>
guarantees that it still compiles, but I'm glad to try and help needed<br>
:)<br>
<br>
<br>
On Mon, Mar 2, 2015 at 1:34 PM, Simon Peyton Jones<br>
<<a href="mailto:simonpj@microsoft.com" target="_blank">simonpj@microsoft.com</a>> wrote:<br>
> Thomas<br>
><br>
><br>
><br>
> Hoopl works on control flow graphs, whereas Core is lambda calculus.  I<br>
> really don’t think Hoopl is going to be any good for optimising Core.<br>
><br>
><br>
><br>
> Ask the ghc-devs mailing list too.  Someone there has been writing about<br>
> arrows recently (take a look at the archive).<br>
><br>
><br>
><br>
> Simon<br>
><br>
><br>
><br>
> From: Thomas Bereknyei [mailto:<a href="mailto:tomberek@gmail.com" target="_blank">tomberek@gmail.com</a>]<br>
> Sent: 02 March 2015 17:07<br>
> To: <a href="mailto:nr@cs.tufts.edu" target="_blank">nr@cs.tufts.edu</a>; Simon Peyton Jones<br>
> Subject: Hoopl and Arrows<br>
><br>
><br>
><br>
> I've been interested in Arrows and their optimization recently. I've run<br>
> into problems during basic tooling so I built a quasiquoter for proc<br>
> notation (still working on rec and let statements, but the rest of it works)<br>
> that converts from haskell-src-exts into a desugarred TH format. My original<br>
> goal was to implement "Casual Commutative Arrows"  [1] but to make it more<br>
> user friendly and to include arrows with effects. I came across Hoopl and at<br>
> first glance I would think it can help with Arrow optimization, especially<br>
> with the tuple shuffling from desuggared proc-do notation. In spite of the<br>
> slogan of "Hoopl: Dataflow Optimization made Simple" and the git repo's<br>
> testing folder, I'm not 100% clear on Hoopl usage. I would be interested in<br>
> anything that can get me started or even a thought or two whether it would<br>
> be worth looking into for Arrows.<br>
><br>
> Simon, regarding [2], my quasiquoter can be rewritten to take `bind`,<br>
> `bind_`, `fixA`, and `ifThenElseA` from scope rather than being built in.<br>
> Would that help with #7828?  I am not very familiar with GHC internals at<br>
> the moment, and I am confused about the complexity of dsArrows.hs in<br>
> contrast with my own parser. It seems I have a good start on it in the<br>
> Parser module at [3], WARNING: untested and rough draft code, though<br>
> suggestions and pointers are welcome. I was thinking of sending some of my<br>
> code to haskell-src-meta because they can't yet translate their version of<br>
> Exp into TH's ExpQ.<br>
><br>
> -Tom<br>
><br>
><br>
> [1] (<a href="https://hackage.haskell.org/package/CCA" target="_blank">https://hackage.haskell.org/<u></u>p<u></u>ackage/CCA</a>)<br>
> [2] (<a href="https://ghc.haskell.org/trac/ghc/ticket/7828#comment:54" target="_blank">https://ghc.haskell.org/trac/<u></u><u></u>ghc/ticket/7828#comment:54</a>)<br>
> [3] (<a href="https://www.fpcomplete.com/user/tomberek/rulestesting" target="_blank">https://www.fpcomplete.com/<u></u>us<u></u>er/tomberek/rulestesting</a>)<br>
><br>
><br>
> ______________________________<u></u><u></u>_________________<br>
> ghc-devs mailing list<br>
> <a href="mailto:ghc-devs@haskell.org" target="_blank">ghc-devs@haskell.org</a><br>
> <a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs" target="_blank">http://mail.haskell.org/cgi-<u></u>bi<u></u>n/mailman/listinfo/ghc-devs</a><br>
><br>
______________________________<u></u><u></u>_________________<br>
ghc-devs mailing list<br>
<a href="mailto:ghc-devs@haskell.org" target="_blank">ghc-devs@haskell.org</a><br>
<a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs" target="_blank">http://mail.haskell.org/cgi-<u></u>bi<u></u>n/mailman/listinfo/ghc-devs</a><br>
</blockquote></div>