Parsing funny arrows
Vladislav Zavialov
vladislav at serokell.io
Fri Aug 28 23:38:23 UTC 2020
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 <kiss.csongor.kiss at gmail.com> 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 at haskell.org
> http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs
More information about the ghc-devs
mailing list