Ah, so returning to my original question: Where is this described/documented? All I can see here > <https://github.com/ndmitchell/hlint#readme>is... >
E.g. is there a HLint user guide? I'm interested in what the annotations can and cannot be. E.g. perhaps ANN could shortcircuit the TH stuff in some common cases? Simon On Mon, 4 Dec 2023 at 12:15, Moritz Angermann <moritz.angerm...@gmail.com> wrote: > I see. That’s where the confusion comes from. Hlint uses them to allow > ignoring specific Hlint warnings: > > {-# ANN module "HLint: ignore Use string literal" #-} > > {- HLINT ignore "Use string literal" -} > > and similar. One could maybe argue they should have never been ANN pragmas > to begin with. > > Examples taken from this SO question: > > https://stackoverflow.com/questions/19237695/haskell-how-to-tell-hlint-not-to-warning-use-string-literal > > On Mon, 4 Dec 2023 at 8:07 PM, Simon Peyton Jones < > simon.peytonjo...@gmail.com> wrote: > >> > I don’t think they do anything specific. >> >> Now I am truly baffled! If they don't do anything, why would they be a >> module at all! Surely they do something? >> >> Simon >> >> On Mon, 4 Dec 2023 at 11:58, Moritz Angermann <moritz.angerm...@gmail.com> >> wrote: >> >>> I don’t think they do anything specific. They just function as a marker >>> to Hlint to find when parsing the source files. Here is one of the original >>> issues we had: >>> https://github.com/ndmitchell/hlint/issues/1251 >>> >>> Simply by not being ANN, it doesn’t trigger the Templar Haskell >>> machinery and thus does not cause compilation slowdowns or iserv needs >>> (e.g. render the module impossible to cross compiler for stage1 cross >>> compilers with not TH support). >>> >>> On Mon, 4 Dec 2023 at 7:45 PM, Simon Peyton Jones < >>> simon.peytonjo...@gmail.com> wrote: >>> >>>> Luckily Hlint also support HLINT instead which removed the TH pipeline. >>>>> >>>> >>>> Where is this described/documented? All I can see here >>>> <https://github.com/ndmitchell/hlint#readme>is >>>> >>>>> For {-# HLINT #-} pragmas GHC may give a warning about an >>>>> unrecognised pragma, which can be suppressed with >>>>> -Wno-unrecognised-pragmas. >>>>> >>>> which mentions HLINT pragmas but says nothing about what they do. >>>> >>>> Simon >>>> >>>> On Mon, 4 Dec 2023 at 09:05, Moritz Angermann < >>>> moritz.angerm...@gmail.com> wrote: >>>> >>>>> Any ANN annotation triggers the TH pipeline and makes them really >>>>> painful to work with, in non-stage2 settings. Lots of Hlint annotations >>>>> use >>>>> ANN and then you have iserv be triggered for each module that has an ANN >>>>> annotation. >>>>> >>>>> Luckily Hlint also support HLINT instead which removed the TH pipeline. >>>>> >>>>> That alone is enough for me personally to recommend against using ANN >>>>> if there is an alternator option to anyone who asks me. >>>>> >>>>> On Mon, 4 Dec 2023 at 5:01 PM, Simon Peyton Jones < >>>>> simon.peytonjo...@gmail.com> wrote: >>>>> >>>>>> The whole ANN mechanism >>>>>> <https://ghc.gitlab.haskell.org/ghc/doc/users_guide/extending_ghc.html?highlight=ann#source-annotations>is, >>>>>> at root, a good idea. It is pretty generan, and allows annotations to be >>>>>> arbitrary expressions, provided they are in Typable and Data. And they >>>>>> are >>>>>> serialised across modules. >>>>>> >>>>>> In practice though, I'm not sure how widely used they are. I'm not >>>>>> sure why. I'd love to hear of counter-examples. >>>>>> >>>>>> Only top level binders can be annotated; but there is no reason in >>>>>> principle that you should not annotate instance declarations. I don't >>>>>> think it'd be too hard to implement. >>>>>> >>>>>> Simon >>>>>> >>>>>> On Sat, 2 Dec 2023 at 14:51, Jaro Reinders <jaro.reind...@gmail.com> >>>>>> wrote: >>>>>> >>>>>>> Hi GHC devs, >>>>>>> >>>>>>> I'm working on a GHC plugin which implements a custom instance >>>>>>> resolution >>>>>>> mechanism: >>>>>>> >>>>>>> https://github.com/noughtmare/transitive-constraint-plugin >>>>>>> >>>>>>> Currently, I need to place instances in a specific order in a >>>>>>> specific file to >>>>>>> recognize them and use them in my plugin. I think my life would be a >>>>>>> lot easier >>>>>>> if I could put annotations on instances. I imagine a syntax like >>>>>>> this: >>>>>>> >>>>>>> data MyInstanceTypes = Refl | Trans deriving Eq >>>>>>> >>>>>>> class f <= g where >>>>>>> inj :: f x -> g x >>>>>>> >>>>>>> instance {-# ANN instance Refl #-} f <= f where >>>>>>> inj = id >>>>>>> >>>>>>> instance {-# ANN instance Trans #-} >>>>>>> forall f g h. (f <= g, g <= h) => f <= h >>>>>>> where >>>>>>> inj = inj @g @h . inj @f @g >>>>>>> >>>>>>> Using this information I should be able to find the right instances >>>>>>> in a more >>>>>>> reliable way. >>>>>>> >>>>>>> One more thing I was thinking about is to make it possible to remove >>>>>>> these >>>>>>> instances from the normal resolution algorithm and only allow them >>>>>>> to be used >>>>>>> by my plugin. >>>>>>> >>>>>>> Do you think this would be easy to implement and useful? Or are >>>>>>> there other >>>>>>> ways to achieve this? >>>>>>> >>>>>>> Cheers, >>>>>>> >>>>>>> Jaro >>>>>>> _______________________________________________ >>>>>>> ghc-devs mailing list >>>>>>> ghc-devs@haskell.org >>>>>>> http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs >>>>>>> >>>>>> _______________________________________________ >>>>>> ghc-devs mailing list >>>>>> ghc-devs@haskell.org >>>>>> http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs >>>>>> >>>>>
_______________________________________________ ghc-devs mailing list ghc-devs@haskell.org http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs