
Jules Bean
do if n>5 then putStrLn "big" else putStrLn "small"
this is shorthand for
do { if n > 5 then putStrLn "big" ; else putStrLn "small" }
which is a syntax error. A statement in a do block cannot begin with the keyword "else".
Haskell' is apparently going to include a hack to permit this case. I think that's a poor decision, because including a hack to the layout rule makes it harder to understand and explain the layout rule.
There's no need to hack the layout rule, you're even giving pointers to the solution. Something like this: if p = do (_, c, a) <- get put (b, c, a) mzero then c = do (b, _, a) <- get put (b, c, a) mzero else a = do (b, c, _) <- get put (b, c, a) mzero end = do (b, c, a) <- get return if p then a else c Advantages are obvious: Order doesn't really matter anymore, as in then "get away" else "or else" if i tell you to end Furthermore, this scheme supports logical comments, a rare kind of control structure enabling mindboggingly diverse rapid prototyping options: if i knew what i want to do if i knew how to do it then i'd have written the next line much earlier if i wrote this line then i don't need to remove the other lines else where in other languages i'd have to do that end -- (c) this sig last receiving data processing entity. Inspect headers for copyright history. All rights reserved. Copying, hiring, renting, performance and/or broadcasting of this signature prohibited.