Earlier quoted context omitted.
Ah, my favorite question. We previously had a custom DSL and it outgrew it's DSL-ness. The DSL was really good at one thing (implicit concurrency and scheduling io), and bad at everything else (cpu, memory, debugging, tooling). The predecessor was wildly successful and created new problems. Once all those secondary concerns became first order, we didn't want to start building all this ecosystem stuff for our homemade…
I only skimmed the tutorial, but in Scala/Finagle: val (friendsX, friendsY) = (friendsOf(x), friendsOf(y)) for { fx really liking the look of this, thanks for open-sourcing!
Something like...
renderPage :: Haxl Html
renderPage = renderHeader + renderBody + renderRightPane + renderFooter
This will travel as far as possible through all paths in the AST collecting all IO to be performed in the first round (which, once fetched, will unblock more of the AST, and the process repeats until we have an answer).