Jules Bean <[EMAIL PROTECTED]> 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.

_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to