<div dir="ltr">Hello Richard,<div><br></div><div>Just FYI `gather` doesn't work with `readS_to_P`  (throws an error), so you'll have to stick to ReadP parsers but, hopefully, that's OK.</div><div><br></div><div>-Iavor</div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Tue, Apr 27, 2021 at 7:14 PM Richard Eisenberg <<a href="mailto:rae@richarde.dev">rae@richarde.dev</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><br>
<br>
> On Apr 27, 2021, at 3:32 PM, Sebastian Graf <<a href="mailto:sgraf1337@gmail.com" target="_blank">sgraf1337@gmail.com</a>> wrote:<br>
> <br>
> Hi Richard,<br>
> <br>
> Maybe I lack a bit of context, but I don't see why you wouldn't choose (3).<br>
> Extending the lexer/parser will yield a declarative specification of what exactly constitutes a GHC_OPTIONS pragma (albeit in a language that isn't Haskell) and should be more efficient than `reads`, even if you fix it to scale linearly. Plus, it seems that's what we do for other pragmas such as RULE already.<br>
<br>
(3) is tempting indeed. There are two problems:<br>
<br>
A. The code that parses strings isn't actually declarative. See <a href="https://gitlab.haskell.org/ghc/ghc/-/blob/d2399a46a01a6e46c831c19e797e656a0b8ca16d/compiler/GHC/Parser/Lexer.x#L1965" rel="noreferrer" target="_blank">https://gitlab.haskell.org/ghc/ghc/-/blob/d2399a46a01a6e46c831c19e797e656a0b8ca16d/compiler/GHC/Parser/Lexer.x#L1965</a>. In particular note the comment: "This stuff is horrible. I hates it." Evidently written by Simon M in 2003 with the introduction of alex.<br>
<br>
B. We need this code outside the lexer, to deal with e.g. :set in GHCi.<br>
<br>
> On Apr 27, 2021, at 4:28 PM, Iavor Diatchki <<a href="mailto:iavor.diatchki@gmail.com" target="_blank">iavor.diatchki@gmail.com</a>> wrote:<br>
> <br>
> ... gather ...<br>
<br>
Aha! That was the magic incantation I needed but did not have. Many thanks, Iavor.<br>
<br>
The curious can see <a href="https://gitlab.haskell.org/ghc/ghc/-/merge_requests/5509/diffs?commit_id=a560fcbbc7d4e37c4909385c55839f793b570e68#c1078a9741c11d1e15d4c678b107092790295bb3_308_317" rel="noreferrer" target="_blank">https://gitlab.haskell.org/ghc/ghc/-/merge_requests/5509/diffs?commit_id=a560fcbbc7d4e37c4909385c55839f793b570e68#c1078a9741c11d1e15d4c678b107092790295bb3_308_317</a> for the final result.<br>
<br>
Thanks!<br>
Richard<br>
_______________________________________________<br>
ghc-devs mailing list<br>
<a href="mailto:ghc-devs@haskell.org" target="_blank">ghc-devs@haskell.org</a><br>
<a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs" rel="noreferrer" target="_blank">http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs</a><br>
</blockquote></div>