On Jun 21, 2010, at 10:18 AM, John Lask wrote:

 do rec
   a <- getChar
   b <- f c
   c <- g b
   putChar c
   return b

I don't particularly care that the only recursive statements are #2,#3 - I just want my nice neat layout back. I have just spent an inordinate amount of time updating code when if the parser recognised "do rec" as a recursive group it would have been a drop in replacement and taken me one tenth of the time.

Why can't we have this?

Why can't you just use let notation do deal with the recursion?  I thought "lets" in do blocks were just a little bit of syntactic sugar for "regular" let expressions, which do allow mutual recursion.  I could be totally wrong though.  I'm thinking of something like:

do a <- getChar
   let b = c >>= return . f
  let c = b >>= return . g
  c >>= putChar
   b