On Thu, Oct 3, 2013 at 2:31 PM, Corentin Dupont <corentin.dup...@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`.) -- 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 Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe