Annotating instances

Simon Peyton Jones simon.peytonjones at gmail.com
Mon Dec 4 09:00:40 UTC 2023


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


More information about the ghc-devs mailing list