DerivingStrategies defaulting warning has no associated enable/suppress flag
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.
Edited by Akhra Gannon