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

Reply via email to