<div dir="ltr">Yeh, I'd missed it was a normal comment and not a new pragma.<div><br></div><div>Pretty much every solution has some screw case; sometimes you get to choose between a bunch of "simple, elegant, and wrong" options and have to decide which "and wrong" will be least expensive (or least frustrating). And a problem with normal comments (behind why I'd missed this was one) is I'm not sure they can be as firmly anchored to transformed ASTs; the ANN mechanism at least has that in its favor.</div><div><br></div><div>Pragmas can as well, as indicated by e.g. {-# UNPACK #-}. Is this 100% true of random comments? And if it is, at what cost to compilations that don't care? I think this needs more than just a SrcSpan, at least for tools like hlint or Liquid Haskell that really want to associate these with AST nodes and maintain them across transformations.</div></div><br><div class="gmail_quote"><div dir="ltr">On Tue, Oct 16, 2018 at 7:01 PM <<a href="mailto:amindfv@gmail.com">amindfv@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="auto"><div></div><div>I think Brandon may have misread your example as "{-# HLINT ... #-}".</div><div><br></div><div>One problem with "{- HLINT" (although I'm personally not in favor of the special-casing) is that if it's just a Haskell comment then it itself is vulnerable to typos. E.g. if I type "{- HILNT foo -}" (L and I swapped), hlint the tool will miss it.</div><div><br></div><div>Tom</div><div><br>El 16 oct 2018, a las 18:44, Simon Peyton Jones via ghc-devs <<a href="mailto:ghc-devs@haskell.org" target="_blank">ghc-devs@haskell.org</a>> escribió:<br><br></div><blockquote type="cite"><div>






<div class="m_3273896114184460676WordSection1">
<p class="MsoNormal"><span>I’m still not getting it.  GHC
<i>ignores</i> everything between {- and -}.  Why would I  need to produce a new GHC if someone wants to us {- WIMWAM blah -}?<u></u><u></u></span></p>
<p class="MsoNormal"><span><u></u> <u></u></span></p>
<p class="MsoNormal"><span>Simon<u></u><u></u></span></p>
<p class="MsoNormal"><span><u></u> <u></u></span></p>
<div style="border:none;border-left:solid blue 1.5pt;padding:0cm 0cm 0cm 4.0pt">
<div>
<div style="border:none;border-top:solid #e1e1e1 1.0pt;padding:3.0pt 0cm 0cm 0cm">
<p class="MsoNormal"><b><span lang="EN-US">From:</span></b><span lang="EN-US"> Brandon Allbery <<a href="mailto:allbery.b@gmail.com" target="_blank">allbery.b@gmail.com</a>>
<br>
<b>Sent:</b> 16 October 2018 23:39<br>
<b>To:</b> Simon Peyton Jones <<a href="mailto:simonpj@microsoft.com" target="_blank">simonpj@microsoft.com</a>><br>
<b>Cc:</b> Simon Marlow <<a href="mailto:marlowsd@gmail.com" target="_blank">marlowsd@gmail.com</a>>; Neil Mitchell <<a href="mailto:ndmitchell@gmail.com" target="_blank">ndmitchell@gmail.com</a>>; <a href="mailto:ghc-devs@haskell.org" target="_blank">ghc-devs@haskell.org</a> Devs <<a href="mailto:ghc-devs@haskell.org" target="_blank">ghc-devs@haskell.org</a>><br>
<b>Subject:</b> Re: Treatment of unknown pragmas<u></u><u></u></span></p>
</div>
</div>
<p class="MsoNormal"><u></u> <u></u></p>
<div>
<p class="MsoNormal">One problem is you have to release a new ghc every time someone comes up with a new pragma-using tool that starts to catch on. Another is that the more of these you have, the more likely a typo will inadvertently match some tool you don't
 even know about but ghc does.<u></u><u></u></p>
</div>
<p class="MsoNormal"><u></u> <u></u></p>
<div>
<div>
<p class="MsoNormal">On Tue, Oct 16, 2018 at 6:34 PM Simon Peyton Jones via ghc-devs <<a href="mailto:ghc-devs@haskell.org" target="_blank">ghc-devs@haskell.org</a>> wrote:<u></u><u></u></p>
</div>
<blockquote style="border:none;border-left:solid #cccccc 1.0pt;padding:0cm 0cm 0cm 6.0pt;margin-left:4.8pt;margin-right:0cm">
<div>
<div>
<p class="MsoNormal">I’m still not understanding what’s wrong with<u></u><u></u></p>
<p class="MsoNormal"> <u></u><u></u></p>
<p class="MsoNormal">{- HLINT blah blah -}<u></u><u></u></p>
<p class="MsoNormal"> <u></u><u></u></p>
<p class="MsoNormal">GHC will ignore it.  HLint can look at it.  Simple.<u></u><u></u></p>
<p class="MsoNormal"> <u></u><u></u></p>
<p class="MsoNormal">I must be missing something obvious.<u></u><u></u></p>
<p class="MsoNormal"> <u></u><u></u></p>
<p class="MsoNormal">Simon<u></u><u></u></p>
<p class="MsoNormal"> <u></u><u></u></p>
<div style="border:none;border-left:solid blue 1.5pt;padding:0cm 0cm 0cm 4.0pt">
<div>
<div style="border:none;border-top:solid #e1e1e1 1.0pt;padding:3.0pt 0cm 0cm 0cm">
<p class="MsoNormal"><b><span lang="EN-US">From:</span></b><span lang="EN-US"> ghc-devs <<a href="mailto:ghc-devs-bounces@haskell.org" target="_blank">ghc-devs-bounces@haskell.org</a>>
<b>On Behalf Of </b>Simon Marlow<br>
<b>Sent:</b> 16 October 2018 21:44<br>
<b>To:</b> Neil Mitchell <<a href="mailto:ndmitchell@gmail.com" target="_blank">ndmitchell@gmail.com</a>><br>
<b>Cc:</b> ghc-devs <<a href="mailto:ghc-devs@haskell.org" target="_blank">ghc-devs@haskell.org</a>><br>
<b>Subject:</b> Re: Treatment of unknown pragmas</span><u></u><u></u></p>
</div>
</div>
<p class="MsoNormal"> <u></u><u></u></p>
<div>
<div>
<p class="MsoNormal">I suggested to Neil that he add the {-# HLINT #-} pragma to GHC. It seemed like the least worst option taking into account the various issues that have already been described in
 this thread. I'm OK with adding HLINT; after all we already ignore OPTIONS_HADDOCK, OPTIONS_NHC98, a bunch of other OPTIONS, CFILES (a Hugs relic), and several more that GHC ignores.<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">We can either<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">(a) not protect people from mistyped pragmas, or
<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">(b) protect people from mistyped pragma names, but then we have to bake in the set of known pragmas<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">We could choose to have a different convention for pragmas that GHC doesn't know about (as Ben suggests), but then of course we don't get any protection for mistyped pragma names
 when using that convention.<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">Cheers<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">Simon<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<p class="MsoNormal"> <u></u><u></u></p>
<div>
<div>
<p class="MsoNormal">On Tue, 16 Oct 2018 at 21:12, Neil Mitchell <<a href="mailto:ndmitchell@gmail.com" target="_blank">ndmitchell@gmail.com</a>> wrote:<u></u><u></u></p>
</div>
<blockquote style="border:none;border-left:solid #cccccc 1.0pt;padding:0cm 0cm 0cm 6.0pt;margin-left:4.8pt;margin-top:5.0pt;margin-right:0cm;margin-bottom:5.0pt">
<p class="MsoNormal">> A warning flag is an interesting way to deal with the issue. On the<br>
> other hand, it's not great from an ergonomic perspective; afterall, this<br>
> would mean that all users of HLint (and any other tool requiring special<br>
<br>
Yep, this means every HLint user has to do an extra thing. I (the<br>
HLint author) now have a whole pile of "how do I disable warnings in<br>
Stack", and "what's the equivalent of this in Nix". Personally, it ups<br>
the support level significantly that I wouldn't go this route.<br>
<br>
I think it might be a useful feature in general, as new tools could<br>
use the flag to prototype new types of warning, but I imagine once a<br>
feature gets popular it becomes too much fuss.<br>
<br>
> > I think it makes a lot of sense to have a standard way for third-parties<br>
> > to attach string-y information to Haskell source constructs. While it's<br>
> > not strictly speaking necessary to standardize the syntax, doing<br>
> > so minimizes the chance that tools overlap and hopefully reduces<br>
> > the language ecosystem learning curve.<br>
><br>
> This sounds exactly like the existing ANN pragma, which is what I've wanted LiquidHaskell to move towards for a long time. What is wrong with using the ANN pragma?<br>
<br>
Significant compilation performance penalty and extra recompilation.<br>
ANN pragmas is what HLint currently uses.<br>
<br>
>  I'm a bit skeptical of this idea. Afterall, adding cases to the<br>
> lexer for every tool that wants a pragma seems quite unsustainable.<br>
<br>
I don't find this argument that convincing. Given the list already<br>
includes CATCH and DERIVE, the bar can't have been _that_ high to<br>
entry. And yet, the list remains pretty short. My guess is the demand<br>
is pretty low - we're just whitelisting a handful of additional words<br>
that aren't misspellings.<br>
<br>
Thanks, Neil<br>
_______________________________________________<br>
ghc-devs mailing list<br>
<a href="mailto:ghc-devs@haskell.org" target="_blank">ghc-devs@haskell.org</a><br>
<a href="https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fmail.haskell.org%2Fcgi-bin%2Fmailman%2Flistinfo%2Fghc-devs&data=02%7C01%7Csimonpj%40microsoft.com%7C87133c79a193420d3ebb08d633b833d8%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C636753263570895397&sdata=zpuwwcwm9abC5oZ8l3V2QsZEdLlKRk%2BZjU1vhLh9Exg%3D&reserved=0" target="_blank">http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs</a><u></u><u></u></p>
</blockquote>
</div>
</div>
</div>
</div>
</div>
<p class="MsoNormal">_______________________________________________<br>
ghc-devs mailing list<br>
<a href="mailto:ghc-devs@haskell.org" target="_blank">ghc-devs@haskell.org</a><br>
<a href="https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fmail.haskell.org%2Fcgi-bin%2Fmailman%2Flistinfo%2Fghc-devs&data=02%7C01%7Csimonpj%40microsoft.com%7C87133c79a193420d3ebb08d633b833d8%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C636753263570905414&sdata=5Ucs1y3wY%2BfLQign3q7YR2dagE5rBjYU75oHULYqKkQ%3D&reserved=0" target="_blank">http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs</a><u></u><u></u></p>
</blockquote>
</div>
<p class="MsoNormal"><br clear="all">
<u></u><u></u></p>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<p class="MsoNormal">-- <u></u><u></u></p>
<div>
<div>
<div>
<div>
<div>
<p class="MsoNormal">brandon s allbery kf8nh<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><a href="mailto:allbery.b@gmail.com" target="_blank">allbery.b@gmail.com</a><u></u><u></u></p>
</div>
</div>
</div>
</div>
</div>
</div>
</div>


</div></blockquote><blockquote type="cite"><div><span>_______________________________________________</span><br><span>ghc-devs mailing list</span><br><span><a href="mailto:ghc-devs@haskell.org" target="_blank">ghc-devs@haskell.org</a></span><br><span><a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs" target="_blank">http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs</a></span><br></div></blockquote></div></blockquote></div><br clear="all"><div><br></div>-- <br><div dir="ltr" class="gmail_signature" data-smartmail="gmail_signature"><div dir="ltr"><div><div dir="ltr"><div>brandon s allbery kf8nh</div><div><a href="mailto:allbery.b@gmail.com" target="_blank">allbery.b@gmail.com</a></div></div></div></div></div>