1. 15
    1. 2

      I appreciate that PureScript has ado for applicative do-notation instead of overloading do + a language prgama & doesn’t need to have something complicated trying to guess what can be done in parallel. Seems this offers some speedups but now you have implicit things going on & do for monads is supposed to be about expressing sequential data flow.

      1. 2

        Generally execution is implicit in Haskell so this is in line with the culture / philosophy of the language. Though, I agree with you that having explicit control over how things are executed is often necessary to engineer things that behave predictably.

        1. 4

          Also, Haskell is one of the few languages that lets the programmer hook into the optimizer with rewrite rules. So this paper can be seen as equivalent to a rewrite rule that rewrites monad binds into applicative <*> for performance reasons.

          (there’s also other precedent for this kind of high level optimizations in Haskell. E.g. stream fusion.)