On Thu, Oct 3, 2013 at 2:31 PM, Corentin Dupont <corentin.dupont@gmail.com> wrote:
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`.)