diff options
Diffstat (limited to 'testsuite')
-rw-r--r-- | testsuite/tests/deriving/should_fail/T14728a.hs | 20 | ||||
-rw-r--r-- | testsuite/tests/deriving/should_fail/T14728a.stderr | 7 | ||||
-rw-r--r-- | testsuite/tests/deriving/should_fail/T14728b.hs | 16 | ||||
-rw-r--r-- | testsuite/tests/deriving/should_fail/T14728b.stderr | 7 | ||||
-rw-r--r-- | testsuite/tests/deriving/should_fail/all.T | 2 |
5 files changed, 52 insertions, 0 deletions
diff --git a/testsuite/tests/deriving/should_fail/T14728a.hs b/testsuite/tests/deriving/should_fail/T14728a.hs new file mode 100644 index 0000000000..28cf8e0ffc --- /dev/null +++ b/testsuite/tests/deriving/should_fail/T14728a.hs @@ -0,0 +1,20 @@ +{-# LANGUAGE GeneralizedNewtypeDeriving #-} +{-# LANGUAGE StandaloneDeriving #-} +{-# LANGUAGE TypeFamilies #-} +{-# LANGUAGE TypeInType #-} +module T14728a where + +import Data.Functor.Identity +import Data.Kind + +class C (a :: Type) where + type T a (x :: a) :: Type + type U z :: a + +instance C () where + type T () '() = Bool + +deriving instance C (Identity a) + +f :: T (Identity ()) ('Identity '()) +f = True diff --git a/testsuite/tests/deriving/should_fail/T14728a.stderr b/testsuite/tests/deriving/should_fail/T14728a.stderr new file mode 100644 index 0000000000..b76d073645 --- /dev/null +++ b/testsuite/tests/deriving/should_fail/T14728a.stderr @@ -0,0 +1,7 @@ + +T14728a.hs:17:1: error: + • Can't make a derived instance of ‘C (Identity a)’ + (even with cunning GeneralizedNewtypeDeriving): + the associated type ‘T’ contains the last type variable + of the class ‘C’ in a kind, which is not (yet) allowed + • In the stand-alone deriving instance for ‘C (Identity a)’ diff --git a/testsuite/tests/deriving/should_fail/T14728b.hs b/testsuite/tests/deriving/should_fail/T14728b.hs new file mode 100644 index 0000000000..7fdfcb3b5e --- /dev/null +++ b/testsuite/tests/deriving/should_fail/T14728b.hs @@ -0,0 +1,16 @@ +{-# LANGUAGE GeneralizedNewtypeDeriving #-} +{-# LANGUAGE StandaloneDeriving #-} +{-# LANGUAGE TypeFamilies #-} +{-# LANGUAGE TypeInType #-} +module T14728b where + +import Data.Functor.Identity +import Data.Kind + +class C (a :: Type) where + type U z :: a + +instance C () where + type U z = '() + +deriving instance C (Identity a) diff --git a/testsuite/tests/deriving/should_fail/T14728b.stderr b/testsuite/tests/deriving/should_fail/T14728b.stderr new file mode 100644 index 0000000000..ee74f8b4da --- /dev/null +++ b/testsuite/tests/deriving/should_fail/T14728b.stderr @@ -0,0 +1,7 @@ + +T14728b.hs:16:1: error: + • Can't make a derived instance of ‘C (Identity a)’ + (even with cunning GeneralizedNewtypeDeriving): + the associated type ‘U’ contains the last type variable + of the class ‘C’ in a kind, which is not (yet) allowed + • In the stand-alone deriving instance for ‘C (Identity a)’ diff --git a/testsuite/tests/deriving/should_fail/all.T b/testsuite/tests/deriving/should_fail/all.T index c9b8469c3c..acd3486918 100644 --- a/testsuite/tests/deriving/should_fail/all.T +++ b/testsuite/tests/deriving/should_fail/all.T @@ -69,3 +69,5 @@ test('T12512', omit_ways(['ghci']), compile_fail, ['']) test('T12801', normal, compile_fail, ['']) test('T14365', [extra_files(['T14365B.hs','T14365B.hs-boot'])], multimod_compile_fail, ['T14365A','']) +test('T14728a', normal, compile_fail, ['']) +test('T14728b', normal, compile_fail, ['']) |