<div dir="ltr"><div class="gmail_quote"><div dir="ltr">On Wed, 17 Oct 2018 at 15:02, Ben Gamari <<a href="mailto:ben@smart-cactus.org">ben@smart-cactus.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Simon Marlow <<a href="mailto:marlowsd@gmail.com" target="_blank">marlowsd@gmail.com</a>> writes:<br>
<br>
> Simon - GHC provides some protection against mistyped pragma names, in the<br>
> form of the -Wunrecognised-pragmas warning, but only for {-# ... #-}<br>
> pragmas. If tools decide to use their own pragma syntax, they don't benefit<br>
> from this. That's one downside, in addition to the others that Neil<br>
> mentioned.<br>
><br>
> You might say we shouldn't care about mistyped pragma names. If the user<br>
> accidentally writes {- HLNIT -} and it is silently ignored, that's not our<br>
> problem. OK, but we cared about it enough for the pragmas that GHC<br>
> understands to add the special warning, and it's reasonable to expect that<br>
> HLint users also care about it.<br>
><br>
If this is the case then in my opinion HLint should be the one that<br>
checks for mis-spelling. </blockquote><div><br></div><div>But there's no way that HLint can know what is a misspelled pragma name.</div><div><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">If we look beyond HLint, there is no way that<br>
GHC could know generally what tokens are misspelled pragmas and which<br>
are tool names.<br></blockquote><div> </div><div>Well this is the problem we created by adding -Wunrecognised-pragmas :)  Now GHC has to know what all the correctly-spelled pragma names are, and the HLint diff is just following this path.<br></div><div><br></div><div>Arguably -Wunrecognised-pragmas is ill-conceived.  I'm surprised we didn't have this discussion when it was added (or maybe we did?). But since we have it, it comes with an obligation to have a centralised registry of pragma names, which is currently in GHC. (it doesn't have to be in the source code, of course)<br></div><div><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
I'm trying to view the pragma question from the perspective of setting a<br>
precedent for other tools. If a dozen Haskell tools were to approach us<br>
tomorrow and ask for similar treatment to HLint it's clear that<br>
hardcoding pragma lists in the lexer would be unsustainable.<br>
<br>
Is this likely to happen? Of course not. However, it is an indication to<br>
me that the root cause of this current debate is our lack of a good<br>
extensible pragmas. It seems to me that introducing a tool pragma<br>
convention, from which tool users can claim namespaces at will, is the<br>
right way to fix this.<br></blockquote><div><br></div><div>And sacrifice checking for misspelled pragma names in those namespaces?  Sure we can say {-# TOOL FOO .. #-} is ignored by GHC, but then nothing wil notice if you say {-# TOOL HLNIT ... #-} by mistake.  If we decide to do that then fine, it just seems like an inconsistent design.</div><div><br></div><div>Cheers</div><div>Simon<br></div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
Cheers,<br>
<br>
- Ben<br>
</blockquote></div></div>