Treatment of unknown pragmas

Neil Mitchell ndmitchell at gmail.com
Wed Oct 17 07:44:54 UTC 2018


People expect pragmas that are machine readable to use the pragma
syntax, and the Haskell report suggests that is the right thing to
expect. They can be highlighted intelligently by IDEs, are immune from
accidental mix ups with normal comments etc. The fact that pragmas can
be lower-case (probably a mistake?) means that {- hlint gets this
wrong -} should probably be interpreted as an HLint directive, when
it's clearly not intended to be.

Note that we can't mandate {-@ or {-! as both are used by Liquid
Haskell and Derive respectively to encode non-prefixed information.

In my view the three options are:

1) Do nothing. Tell HLint to use {- HLINT -} or find some unencumbered
syntax. There's no point mandating a specific unencumbered syntax in
the report, as the report already mandates a syntax, namely {-# #-}.

2) Whitelist HLint as a pragma. My preferred solution, but I realise
that encoding knowledge of every tool into GHC is not a great
solution.

3) Whitelist either X-* or TOOL as a pragma, so GHC has a universal
ignored pragma, allowing HLint pragmas to be written as either {-#
TOOL HLINT ... #-} or {-# X-HLINT ... #-}

Thanks, Neil


On Tue, Oct 16, 2018 at 11:44 PM Simon Peyton Jones
<simonpj at microsoft.com> wrote:
>
> I’m still not getting it.  GHC ignores everything between {- and -}.  Why would I  need to produce a new GHC if someone wants to us {- WIMWAM blah -}?
>
>
>
> Simon
>
>
>
> From: Brandon Allbery <allbery.b at gmail.com>
> Sent: 16 October 2018 23:39
> To: Simon Peyton Jones <simonpj at microsoft.com>
> Cc: Simon Marlow <marlowsd at gmail.com>; Neil Mitchell <ndmitchell at gmail.com>; ghc-devs at haskell.org Devs <ghc-devs at haskell.org>
> Subject: Re: Treatment of unknown pragmas
>
>
>
> 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.
>
>
>
> On Tue, Oct 16, 2018 at 6:34 PM Simon Peyton Jones via ghc-devs <ghc-devs at haskell.org> wrote:
>
> I’m still not understanding what’s wrong with
>
>
>
> {- HLINT blah blah -}
>
>
>
> GHC will ignore it.  HLint can look at it.  Simple.
>
>
>
> I must be missing something obvious.
>
>
>
> Simon
>
>
>
> From: ghc-devs <ghc-devs-bounces at haskell.org> On Behalf Of Simon Marlow
> Sent: 16 October 2018 21:44
> To: Neil Mitchell <ndmitchell at gmail.com>
> Cc: ghc-devs <ghc-devs at haskell.org>
> Subject: Re: Treatment of unknown pragmas
>
>
>
> 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.
>
>
>
> We can either
>
> (a) not protect people from mistyped pragmas, or
>
> (b) protect people from mistyped pragma names, but then we have to bake in the set of known pragmas
>
>
>
> 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.
>
>
>
> Cheers
>
> Simon
>
>
>
>
>
> On Tue, 16 Oct 2018 at 21:12, Neil Mitchell <ndmitchell at gmail.com> wrote:
>
> > A warning flag is an interesting way to deal with the issue. On the
> > other hand, it's not great from an ergonomic perspective; afterall, this
> > would mean that all users of HLint (and any other tool requiring special
>
> Yep, this means every HLint user has to do an extra thing. I (the
> HLint author) now have a whole pile of "how do I disable warnings in
> Stack", and "what's the equivalent of this in Nix". Personally, it ups
> the support level significantly that I wouldn't go this route.
>
> I think it might be a useful feature in general, as new tools could
> use the flag to prototype new types of warning, but I imagine once a
> feature gets popular it becomes too much fuss.
>
> > > I think it makes a lot of sense to have a standard way for third-parties
> > > to attach string-y information to Haskell source constructs. While it's
> > > not strictly speaking necessary to standardize the syntax, doing
> > > so minimizes the chance that tools overlap and hopefully reduces
> > > the language ecosystem learning curve.
> >
> > 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?
>
> Significant compilation performance penalty and extra recompilation.
> ANN pragmas is what HLint currently uses.
>
> >  I'm a bit skeptical of this idea. Afterall, adding cases to the
> > lexer for every tool that wants a pragma seems quite unsustainable.
>
> I don't find this argument that convincing. Given the list already
> includes CATCH and DERIVE, the bar can't have been _that_ high to
> entry. And yet, the list remains pretty short. My guess is the demand
> is pretty low - we're just whitelisting a handful of additional words
> that aren't misspellings.
>
> Thanks, Neil
> _______________________________________________
> ghc-devs mailing list
> ghc-devs at haskell.org
> http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs
>
> _______________________________________________
> ghc-devs mailing list
> ghc-devs at haskell.org
> http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs
>
>
>
>
> --
>
> brandon s allbery kf8nh
>
> allbery.b at gmail.com


More information about the ghc-devs mailing list