[GHC] #11796: Warn about unwanted instances in a modular way
GHC
ghc-devs at haskell.org
Mon May 23 17:42:03 UTC 2016
#11796: Warn about unwanted instances in a modular way
-------------------------------------+-------------------------------------
Reporter: Lemming | Owner:
Type: feature request | Status: new
Priority: normal | Milestone:
Component: Compiler | Version: 8.1
Resolution: | Keywords:
Operating System: Unknown/Multiple | Architecture:
| Unknown/Multiple
Type of failure: None/Unknown | Test Case:
Blocked By: | Blocking:
Related Tickets: #11219 | Differential Rev(s):
Wiki Page: |
-------------------------------------+-------------------------------------
Comment (by Lemming):
Replying to [comment:3 RyanGlScott]:
> * We currently have `WARNING` and `DEPRECATED` pragmas
([http://downloads.haskell.org/~ghc/8.0.1/docs/html/users_guide/glasgow_exts.html
#warning-and-deprecated-pragmas link]) that serve a very similar role to
what you're proposing.
A unification with the WARNING pragma looks like a good idea to me. I
think I did not consider it, because currently warnings cannot be grouped.
But if WARNINGs can be grouped we could re-use this capability for
`instance` warnings.
> This always emits a warning. But we could envision a flags like
`-Wpragma-error="unsafePerformIO"` or `-Wpragma-
suppress="unsafePerformIO"` that would either elevate a `WARNING` pragma
to an error or suppress its warning altogether, respectively. (We'd also
need `-Wpragma-warn` for when we want to explicitly request a warning,
rather than an error). So implementing `-Wpragma-error`, `-Wpragma-warn`,
and `-Wpragma-suppress` seems like an important step.
The machinery sketched in #11219 seems like a good way to switch between
the effect of hitting a warning.
> * Lastly, we'd need some form of conflict resolution for unique strings.
I could certainly see a scenario where a package has multiple `FooInt`
strings floating around. Perhaps we could use a representation of
`-Wpragma-warn=<package>:<module>:<uniq_string>`, where `<package>` and
`<module>` are optional.
For `instance`s the module name should not be part of the identifier. The
definition of the instance can be anywhere in the package in a private
module. This module can be renamed without even a minor version bump. But
when I think about it, the same is true for function identifiers.
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/11796#comment:4>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list