[Haskell-cafe] Re: Re: monad subexpressions

Neil Mitchell ndmitchell at gmail.com
Fri Aug 3 13:04:31 EDT 2007


> > Can you combine let and do?
> >
> > do let x = (<- a)
> >    f x
> 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)

Currently, in let x = ... the x is in scope on the right hand side.
Now it isn't. Changing the order of evaluation with syntactic sugar
seems fine, changing the lexical scoping seems nasty. Perhaps this is
a reason to disallow monadic expressions in a let.

> > Our "best guess" is that all monadic bindings get floated to the
> > previous line of the innermost do block, in left-to-right order.
> > Monadic expressions in let statements are allowed. Outside a do block,
> > monadic subexpressions are banned.
> Sure.  SPJ mentioned that you wouldn't promote (<- x) past a lambda.
> I'm not convinced (it seems to fall into the same category as the if
> statement), but it's worth considering.

I'm not convinced either, a nice concrete example would let people
ponder this a bit more. What is nice to note is that all your answers
to my questions matched perfectly with what I thought should happen.



More information about the Haskell-Cafe mailing list