On 05/07/2012 20:31, Tyson Whitehead wrote:
On July 5, 2012 10:42:53 Mikhail Vorozhtsov wrote:
After 21 months of occasional arguing the lambda-case proposal(s) is in
danger of being buried under its own trac ticket comments. We need fresh
blood to finally reach an agreement on the syntax. Read the wiki
page[1], take a look at the ticket[2], vote and comment on the proposals!
If I understand correctly, we currently we have
\ apat1 ... apatn -> exp
The possibility using '\' as a layout herald (like let, do, etc.)
\ { apat1 ... apatn -> exp; ... }
is suggested on the wiki, but rejected because code like so
mask $ \restore -> do
stmt1
...
by translating it into (Section 9.3 of the 98 Report)
mask $ \ { restore -> do { }
} stmt1
http://www.haskell.org/onlinereport/syntax-iso.html
The reason for this is
1 - the layout level for '\' is the column of the 'restore' token
2 - the layout level for 'do' would be the column of the first token of 'stmt1'
3 - the '\' level is greater than the potential 'do' level so the fall through
'{}' insertion rule fires instead of the desired '{' insertion rule
4 - the '\' level is greater than the identation level for the first token of
'stms1' (now established to not be part of the 'do') so the '}' rule fires
Why not just let enclosed scopes be less indented than their outer ones?
I think this is undesirable. You get strange effects like
f x y = x + y
where -- I just left this where here by accident
g x = ...
parses as
f x y = x + y
where { -- I just left this empty where here by accident
g x = ...
}
and
instance Exception Foo where
instance Exception Bar
parses as
instance Exception Foo where {
instance Exception Bar
}
That is, layout contexts that should really be empty end up surprisingly
swallowing the rest of the file.
Cheers,
Simon
It would then correctly translate the above. This of course implies that any
code that requires the original translation (i.e., where the last of multiple
enclosing blocks should be an empty block) would no longer work.
Is any code actually relying on this though? It seems like a pretty esoteric
corner case. If not, my vote would be to relax this rule and go with '\'
being a layout hearld with full case style matching (i.e., guards too).
Cheers! -Tyson
_______________________________________________
Glasgow-haskell-users mailing list
Glasgow-haskell-users@haskell.org
http://www.haskell.org/mailman/listinfo/glasgow-haskell-users
_______________________________________________
Glasgow-haskell-users mailing list
Glasgow-haskell-users@haskell.org
http://www.haskell.org/mailman/listinfo/glasgow-haskell-users