Call to arms: lambda-case is stuck and needs your help
Wolfgang Jeltsch
g9ks157k at acme.softbase.org
Mon Jul 9 18:14:27 CEST 2012
Am Samstag, den 07.07.2012, 00:08 -0400 schrieb Tyson Whitehead:
> I've thought some more about this and it seems to me that there are
> two ways people might intuitively think about doing grouping via
> indentation.
>
> 1 - the first item is on the same line and subsequent ones are lined
> up with it
>
> do stmt1
> stmt2
>
> 2 - the first item is on a new line and subsequent ones are lined up
> with it.
>
> do
> stmt1
> stmt2
>
> The current layout engine is targeted at (1). It appears to do (2),
> but it is not really reliable as things start to go south if the first
> line happened to open more than one grouping (precisely the problem
> that make '\' a group token would introduce in codes). For an
> example, consider
>
> let greet name = do
> putStr "hello "
> putStrLn name
> in f "world"
>
> It currently translates into
>
> let { greet name = do {} } putStr "hello " putStrLn name in f "world"
>
> This results in an unituituve "Empty 'do' construct" error message.
The problem is that your example is not consistently using (2). A pure
(2)-example would look like this:
let
greet name = do
putStr "hello "
putStrLn name
in greet "world"
And this works. :-)
Best wishes,
Wolfgang
More information about the Glasgow-haskell-users
mailing list