
Hi Csongor, I believe the reason for this failure is that a -> @m b gets parsed as a -> @(m b). Why is that? Because a ‘btype’ includes type-level application. If you replace the ‘btype’ after PREFIX_AT with an ‘atype’, this particular issue should go away. At least that’s my hypothesis, I haven’t tested it. - Vlad
On 29 Aug 2020, at 01:32, Csongor Kiss
wrote: Hello devs,
I am trying to modify GHC's parser to allow the following syntax in types:
a -> @m b
but my naive attempt was unsuccessful:
type :: { LHsType GhcPs } : btype { $1 } | btype '->' PREFIX_AT btype ctype ...
For example when I try to parse the following code (and turn on the lexer debug log):
test :: a -> @m b test = undefined
I get the following
token: ITvarid "test" token: ITdcolon NormalSyntax token: ITvarid "a" token: ITrarrow NormalSyntax token: ITtypeApp token: ITvarid "m" token: ITvarid "b" token: ITsemi
Parse.hs:2:1: error: parse error (possibly incorrect indentation or mismatched brackets) | 2 | test = undefined
I don't have much experience with hacking on the parser so I'm likely missing something obvious. Could someone please point at what I might be doing wrong?
Thanks in advance.
Cheers, Csongor _______________________________________________ ghc-devs mailing list ghc-devs@haskell.org http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs