[Haskell-beginners] Re: question on layout

Brent Yorgey byorgey at seas.upenn.edu
Sat Jun 20 12:05:36 EDT 2009


On Sat, Jun 20, 2009 at 11:44:09AM -0400, George Huber wrote:
> Maurí­cio wrote:
>> Also, using layout,
>>
>> do
>>      a <- x
>>      let b = a
>>      y b
>>      z
>>
>> expands to
>>
>> do {a <- x ; let {b = a} in do {y b >> z}}
>>
> I'm curious as to where the second `do' came from?

Well, the above translation isn't quite correct, the second 'do'
wouldn't come until later.  The point is that 'do { let x = y; foo }'
translates to 'let x = y in do { foo }'.  So

do
  a <- x
  let b = a
  y b
  z

gets translated as follows:

  do { a <- x ; let b = a ; y b ; z }

(that's just inserting braces and semicolons using layout), and then

  x >>= \a -> do { let b = a ; y b ; z }

  x >>= \a -> let b = a in do { y b ; z }

  x >>= \a -> let b = a in yb >> do { z }

  x >>= \a -> let b = a in yb >> z


-Brent


More information about the Beginners mailing list