On 17 Jan 2010, at 11:44, Andrew Coppin wrote:

Urg, but that's *ugly*. Is there no way I can reduce the amount of
indentation to something more reasonable?

main = do
 putStrLn "Line 1"
 putStrLn "Line 2"

 let xs = do
       x <- [1..10]
       y <- [1..10]
       return (x+y)

 print xs

That better?

It's an improvement. It's still not pretty, but I guess that's as good as it's going to get...

Maybe this is an instance of Haskell trying to tell me "if you need to write a 20-line do-block in the middle of your function, you're doing it wrong".

Haskell starts the new indentation level where the following lexeme is (Haskell-98 Report, sec. 2.7). So to reduce indentation, one must start a new line (already mentioned in this thread). This works in Hugs:
main =
  do
  putStrLn "Line 1"
  putStrLn "Line 2"

  let
    xs =
      do
      x <- [1..10]
      y <- [1..10]
      return (x+y)

  print xs

The "xs" on a new line looks a bit unusual, and it takes a bit more vertical space, but one gets nice indentation levels.

  Hans


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

Reply via email to