[Haskell-cafe] Parse error

Daniel Fischer daniel.is.fischer at web.de
Sun Jan 17 05:31:16 EST 2010


Am Sonntag 17 Januar 2010 11:05:47 schrieb Andrew Coppin:
> Is there a specific reason why GHC consistently refuses to accept the
> following perfectly reasonable code snippet?

Yes, you violated the layout rule.

>
> main = do
>   putStrLn "Line 1"
>   putStrLn "Line 2"
>
>   let xs = do
>     x <- [1..10]
>     y <- [1..10]
>     return (x+y)
>
>   print xs
>
> No matter which way I rearrange this, it *insists* that there's a parse
> error. This is very frustrating, given that it's utterly clear what I
> want...

It's not.

ACLayout.hs:7:11: Empty 'do' construct

should give a hint (line 7 is "  let xs = do").
The next line after that is indented less than the "xs", so it ends the 
binding for xs (in fact, the entire let binding group) .
You have to indent the lines in the do-block defining xs more than xs 
itself.



More information about the Haskell-Cafe mailing list