Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Inlay hints for deriving strategies #4213

Open
michaelpj opened this issue May 5, 2024 · 3 comments
Open

Inlay hints for deriving strategies #4213

michaelpj opened this issue May 5, 2024 · 3 comments
Labels
type: enhancement New feature or request

Comments

@michaelpj
Copy link
Collaborator

Is your enhancement request related to a problem? Please describe.

When you use deriving without deriving strategies, the choice of how the instance is derived is implicit. We could make this explicit with inlay hints.

Describe the solution you'd like

data Foo ...
  deriving <hint>stock</hint> (Eq, Ord)

The tricky bit will be if we have a list of derived classes which use different strategies! I would suggest something like:

data Foo ...
   deriving <hint>stock,anyclass</hint> (Eq, ToJSON)

Triggering this would of course produce

data Foo ..
   deriving stock Eq
   deriving anyclass ToJSON
@michaelpj
Copy link
Collaborator Author

This would be useful as a code action also, so we should make sure to expose it as a code action handler too. "Make deriving strategies explicit" or something.

@michaelpj
Copy link
Collaborator Author

On reflection I think this might actually be quite hard: knowing which deriving strategy GHC has chosen is not easy, I think. There has been some work in GHC to expose this information in the diagnostics, we might need to wait for that: https://gitlab.haskell.org/ghc/ghc/-/merge_requests/12817

@michaelpj
Copy link
Collaborator Author

We could maybe take some the code from that PR, but it's fairly non-trivial!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
type: enhancement New feature or request
Projects
None yet
Development

No branches or pull requests

2 participants