[commit: ghc] master: Mention DerivingStrategies in the warning when DAC and GND are both enabled (800d77e)

git at git.haskell.org git at git.haskell.org
Sun Jan 20 14:19:27 UTC 2019


Repository : ssh://git@git.haskell.org/ghc

On branch  : master
Link       : http://ghc.haskell.org/trac/ghc/changeset/800d77e882f24066a7f6d818b2606ad8a0e79e02/ghc

>---------------------------------------------------------------

commit 800d77e882f24066a7f6d818b2606ad8a0e79e02
Author: Chaitanya Koparkar <ckoparkar at gmail.com>
Date:   Mon Jan 14 14:36:29 2019 -0500

    Mention DerivingStrategies in the warning when DAC and GND are both enabled
    
    Summary:
    
    When DeriveAnyClass and GeneralizedNewtypeDeriving are both enabled,
    GHC prints out a warning that specifies the strategy it used to
    derive a class. This patch updates the warning to mention that users
    may pick a particular strategy by using DerivingStrategies.
    
    Test plan: make test TEST=T16179


>---------------------------------------------------------------

800d77e882f24066a7f6d818b2606ad8a0e79e02
 compiler/typecheck/TcDeriv.hs                         | 5 ++++-
 testsuite/tests/deriving/should_compile/T16179.hs     | 7 +++++++
 testsuite/tests/deriving/should_compile/T16179.stderr | 5 +++++
 testsuite/tests/deriving/should_compile/all.T         | 1 +
 4 files changed, 17 insertions(+), 1 deletion(-)

diff --git a/compiler/typecheck/TcDeriv.hs b/compiler/typecheck/TcDeriv.hs
index 90b230a..6078a7a 100644
--- a/compiler/typecheck/TcDeriv.hs
+++ b/compiler/typecheck/TcDeriv.hs
@@ -1640,7 +1640,10 @@ mkNewTypeEqn
                      [ text "Both DeriveAnyClass and"
                        <+> text "GeneralizedNewtypeDeriving are enabled"
                      , text "Defaulting to the DeriveAnyClass strategy"
-                       <+> text "for instantiating" <+> ppr cls ]
+                       <+> text "for instantiating" <+> ppr cls
+                     , text "Use DerivingStrategies to pick"
+                       <+> text "a different strategy"
+                      ]
                  mk_originative_eqn DerivSpecAnyClass
                -- CanDeriveStock
                CanDeriveStock gen_fn -> mk_originative_eqn $
diff --git a/testsuite/tests/deriving/should_compile/T16179.hs b/testsuite/tests/deriving/should_compile/T16179.hs
new file mode 100644
index 0000000..5873f89
--- /dev/null
+++ b/testsuite/tests/deriving/should_compile/T16179.hs
@@ -0,0 +1,7 @@
+{-# LANGUAGE DeriveAnyClass             #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+
+module T16179 where
+
+class C a
+newtype T a = MkT a deriving C
diff --git a/testsuite/tests/deriving/should_compile/T16179.stderr b/testsuite/tests/deriving/should_compile/T16179.stderr
new file mode 100644
index 0000000..c3815d1
--- /dev/null
+++ b/testsuite/tests/deriving/should_compile/T16179.stderr
@@ -0,0 +1,5 @@
+T16179.hs:7:30: warning:
+     Both DeriveAnyClass and GeneralizedNewtypeDeriving are enabled
+      Defaulting to the DeriveAnyClass strategy for instantiating C
+      Use DerivingStrategies to pick a different strategy
+     In the newtype declaration for ‘T’
diff --git a/testsuite/tests/deriving/should_compile/all.T b/testsuite/tests/deriving/should_compile/all.T
index 8c84bcc..ef6259d 100644
--- a/testsuite/tests/deriving/should_compile/all.T
+++ b/testsuite/tests/deriving/should_compile/all.T
@@ -114,3 +114,4 @@ test('T15290c', normal, compile, [''])
 test('T15290d', normal, compile, [''])
 test('T15398', normal, compile, [''])
 test('T15637', normal, compile, [''])
+test('T16179', normal, compile, [''])



More information about the ghc-commits mailing list