# [Haskell-cafe] Re: Re: Re: monad subexpressions

Chris Smith cdsmith at twu.net
Fri Aug 3 16:01:14 EDT 2007

```Neil Mitchell <ndmitchell at gmail.com> wrote:
> > Right.  In effect, as a matter of fact, the notation
> >
> >     x <- a
> >
> > would become equivalent to
> >
> >     let x = (<- a)
>
> Hmm, interesting. Consider:
>
> let x = 12
> let x = (<- x)

Okay, so the desugaring process wouldn't terminate in that case!  One
could either: (a) try to retain the equivalence in theory, but make it
illegal to use x in a monadic subexpression when defining x; (b) we
could abandon my claim that they are equivalent.

> I'm not convinced either, a nice concrete example would let people
> ponder this a bit more.

I tried to provide something in my response to Simon.  Here it is again:

One could sugar:

do tax <- getTax
return \$ map (\price -> price * (1 + tax)) bill

into:

do return \$ map (\price -> price * (1 + (<- getTax))) someNums

> What is nice to note is that all your answers
> to my questions matched perfectly with what I thought should happen.

That is nice.  I'm still very uncomfortable with the <- syntax (a
complete flip for me since this morning!); and a little uneasy about the
use of case, if, lambdas, etc.  Time to keep thinking, I guess.

I'd like to take Simon's suggestion and do a wiki page about this; but
it should probably be on the Haskell prime wiki, no?  I'm not entirely
clear on how to get an account there.  I could add it to HaskellWiki,
but I think that would be the wrong place for it.

--
Chris Smith

```