[Haskell-beginners] Re: Non-recursive binding expression

Brent Yorgey byorgey at seas.upenn.edu
Sat Feb 28 19:10:47 EST 2009

On Sat, Feb 28, 2009 at 10:31:37PM +0000, Will Ness wrote:
> That's what I understood the OP wanted - Scheme's LET, not LETREC, allowing for 
> shadowing. I was suprised let-statement in do chain didn't work that way. I 
> expected it to be equivalent to a kind of code above, since each new line in do 
> block represents a nested function in explicit bind notation, and nested 
> function binding definitely provides for non-recursive let kind of argument 
> binding, with shadowing. 
> I thought the whole point of having special let statement in do notation was 
> not to have to write the kind of code above with singleton lists. Since we have 
> shadowing there, it should've been so in let-statements too. Isn't it?

No, the point of let expressions in do-blocks is to have a convenient
way to make pure bindings, i.e. ones that aren't piped through >>= .
Note that let statements in do-blocks just get desugared into normal
let expressions:

  do { let x = y ; stuff }
    desugars into

  let x = y in do { stuff }

Haskell simply doesn't have anything equivalent to Scheme's LET,
except for actual nested functions.


More information about the Beginners mailing list