Skip to content

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
To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information