Desugaring do-notation to Applicative

Simon Marlow marlowsd
Fri Oct 11 09:55:30 UTC 2013


Thanks for all the comments.  I've updated the wiki page, in particular 
to make it clear that Applictive do-notation would be an opt-in extension.

Cheers,
Simon

On 02/10/13 16:09, Dan Doel wrote:
> Unfortunately, in some cases, function application is just worse. For
> instance, when the result is a complex arithmetic expression:
>
>      do x <- expr1; y <- expr2; z <- expr3; return $ x*y + y*z + z*x
>
> In cases like this, you have pretty much no choice but to name
> intermediate variables, because the alternative is incomprehensible. But
> applicative notation:
>
>      (\x y z -> x*y + y*z + z*x) <$> expr1 <*> expr2 <*> expr3
>
> moves the variable bindings away from the expressions they're bound to,
> and we require extra parentheses to delimit things, and possibly more.
>
> Desugaring the above do into applicative is comparable to use of plain
> let in scheme (monad do is let*, mdo was letrec). And sometimes, let is
> nice, even if it has an equivalent lambda form.
>
> And as Jake mentioned, syntax isn't the only reason for Applicative.
> Otherwise it'd just be some alternate names for functions involving Monad.
>
>
>
> On Wed, Oct 2, 2013 at 5:12 AM, <p.k.f.holzenspies at utwente.nl
> <mailto:p.k.f.holzenspies at utwente.nl>> wrote:
>
>     I thought the whole point of Applicative (at least, reading Connor?s
>     paper) was to restore some function-application-style to the whole
>     effects-thing, i.e. it was the very point **not** to resort to binds
>     or do-notation.____
>
>     __ __
>
>     That being said, I?m all for something that will promote the use of
>     the name ?pure? over ?return?.____
>
>     __ __
>
>     +1 for the Opt-In____
>
>     __ __
>
>     Ph.____
>
>     __ __
>
>     __ __
>
>     __ __
>
>     *From:*Glasgow-haskell-users
>     [mailto:glasgow-haskell-users-bounces at haskell.org
>     <mailto:glasgow-haskell-users-bounces at haskell.org>] *On Behalf Of
>     *Iavor Diatchki
>
>     ____
>
>     __ __
>
>     do x1 <- e1____
>
>     __ __
>
>         -- The following part is `Applicative`____
>
>         (x2,x3) <- do x2 <- e2 x1____
>
>                       x3 <- e3____
>
>                       pure (x2,x3)____
>
>     __ __
>
>         f x1 x2 x3____
>
>
>     _______________________________________________
>     Glasgow-haskell-users mailing list
>     Glasgow-haskell-users at haskell.org
>     <mailto:Glasgow-haskell-users at haskell.org>
>     http://www.haskell.org/mailman/listinfo/glasgow-haskell-users
>
>




More information about the Glasgow-haskell-users mailing list