On Thu, Oct 3, 2013 at 2:31 PM, Corentin Dupont

> test :: Bool -> IO ()
> test foo = do
>    let bar = case foo of
>        True ->  "Foo";
>        False -> "Bar"
>    return ()
> while this one does (just adding one space in front of True and False):
> test :: Bool -> IO ()
> test foo = do
>    let bar = case foo of
>         True ->  "Foo";
>         False -> "Bar"
>    return ()

Do you understand how layout works? Informally, something that is more
indented is a continuation of the previous expression, while something
equally or less indented is a new expression. In this case, the previous
expression is `bar = case foo of` and indenting `True` to the same level as
`bar` means you have ended the expression starting with `bar =`. Adding
just one extra space indicates that it's still part of `bar =`.

(ghc is actually being somewhat lenient here; strictly speaking, you are
not indented beyond the `case` so it should have ended the `case`
expression. ghc allows some sloppiness like this when there absolutely must
be something else after, but there are limits mostly imposed by layout
introducers like `let` and `do`.)

brandon s allbery kf8nh                               sine nomine associates
allber...@gmail.com                                  ballb...@sinenomine.net
unix, openafs, kerberos, infrastructure, xmonad        http://sinenomine.net
Haskell-Cafe mailing list

Reply via email to