
2017-02-21 19:55 GMT+01:00 Richard Eisenberg
As I understand pattern and expression contexts are always separate in Haskell so the part just after 'of course' is not clear to me.
Sadly, this is not true. We don’t always know whether we’re parsing an expression or a pattern. Specifically, imagine this prefix of a Haskell definition:
foo = do Just x
Ah yes, partial parses. I did not think about this.
With -XTypeApplications, GHC lexes ‘ @‘ and ‘@‘ separately.
For the record: GHCi, version 8.0.2: http://www.haskell.org/ghc/ :? for help Prelude> :set -XTypeApplications Prelude> let f x@Nothing = print x in f Nothing Nothing Prelude> let f x @Nothing = print x in f Nothing <interactive>:3:5: error: Parse error in pattern: f x @Nothing Prelude> let f x@ Nothing = print x in f Nothing Nothing Prelude> let f x @ Nothing = print x in f Nothing <interactive>:11:5: error: Parse error in pattern: f x @Nothing Prelude> :set -XNoTypeApplications Prelude> let f x@Nothing = print x in f Nothing Nothing Prelude> let f x@ Nothing = print x in f Nothing Nothing Prelude> let f x @Nothing = print x in f Nothing Nothing Prelude> let f x @ Nothing = print x in f Nothing Nothing
Perhaps the ghc-proposals process will bring such problems to light sooner. I’m sorry our design decisions here have caused trouble!
As I understand keeping Language Report full up to date is a lot of work, but keeping just the sections about Lexing and Parsing up to date should be a part of ghc-proposals in my opinion, so that independent tools have information to rely on. -- Gracjan