
#15839: DerivingStrategies defaulting warning has no associated enable/suppress flag -------------------------------------+------------------------------------- Reporter: tejon | Owner: (none) Type: bug | Status: new Priority: normal | Milestone: Component: Compiler | Version: 8.6.1 Resolution: | Keywords: deriving, | newcomer Operating System: Unknown/Multiple | Architecture: Type of failure: Poor/confusing | Unknown/Multiple error message | Test Case: Blocked By: | Blocking: Related Tickets: | Differential Rev(s): Wiki Page: | -------------------------------------+------------------------------------- Description changed by tejon: Old description:
When `DerivingStrategies`, `DeriveAnyClass` and `GeneralizedNewtypeDeriving` are enabled together, an instance that could be derived with either `newtype` or `anyclass` throws a warning when no strategy is specified. It appears to be impossible to suppress this warning. Even `-w` doesn't work!
New description: When `DeriveAnyClass` and `GeneralizedNewtypeDeriving` are enabled together, an instance that could be derived with either one defaults to `DeriveAnyClass` and throws a warning to that effect. There is currently no flag to suppress that warning (it appears even with `-w`). In the presence of `DerivingStrategies`, it seems desirable to be able to suppress this. Proposed flag to control it: `-Wderiving-defaults`, after the pattern of `-Wtype-defaults`. This flag should be part of the default warning set, as without `DerivingStrategies` it remains a bad idea to have both newtype and anyclass active. Minimal example (thanks RyanGIScott): {{{ {-# LANGUAGE DeriveAnyClass #-} {-# LANGUAGE GeneralizedNewtypeDeriving #-} module Bug where class C a newtype T a = MkT a deriving C }}} {{{ $ /opt/ghc/8.6.1/bin/ghci Bug.hs GHCi, version 8.6.1: http://www.haskell.org/ghc/ :? for help Loaded GHCi configuration from /home/rgscott/.ghci [1 of 1] Compiling Bug ( Bug.hs, interpreted ) Bug.hs:6:30: warning: ⢠Both DeriveAnyClass and GeneralizedNewtypeDeriving are enabled Defaulting to the DeriveAnyClass strategy for instantiating C ⢠In the newtype declaration for âTâ | 6 | newtype T a = MkT a deriving C | ^ Ok, one module loaded. }}} -- -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/15839#comment:3 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler