### Re: Desugaring do-notation to Applicative

Simon Marlow <marlowsd <at> gmail.com>

2013-10-11 09:55:30 GMT

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