Annotating instances

Simon Peyton Jones simon.peytonjones at gmail.com
Mon Dec 4 11:45:05 UTC 2023


>
> 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.angermann at 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.peytonjones at 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.reinders at 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 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
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/ghc-devs/attachments/20231204/9951dba6/attachment.html>


More information about the ghc-devs mailing list