[Haskell-cafe] Re: if - then - else layout
Achim Schneider
barsoap at web.de
Thu Sep 25 05:12:26 EDT 2008
Jules Bean <jules at jellybean.co.uk> wrote:
> 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.
More information about the Haskell-Cafe
mailing list