[Haskell-cafe] indentation with let and do
Brandon Allbery
allbery.b
Thu Oct 3 18:44:59 UTC 2013
On Thu, Oct 3, 2013 at 2:31 PM, Corentin Dupont
<corentin.dupont at 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
allbery.b at gmail.com ballbery at sinenomine.net
unix, openafs, kerberos, infrastructure, xmonad http://sinenomine.net
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.haskell.org/pipermail/haskell-cafe/attachments/20131003/2e220209/attachment.htm>
More information about the Haskell-Cafe
mailing list