[Haskell-cafe] Re: Re: monad subexpressions
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