summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--compiler/typecheck/TcTyClsDecls.hs4
-rw-r--r--testsuite/tests/gadt/T14719.hs8
-rw-r--r--testsuite/tests/gadt/T14719.stderr18
-rw-r--r--testsuite/tests/gadt/all.T1
-rw-r--r--testsuite/tests/polykinds/T9222.stderr4
5 files changed, 31 insertions, 4 deletions
diff --git a/compiler/typecheck/TcTyClsDecls.hs b/compiler/typecheck/TcTyClsDecls.hs
index cd08570af6..7436b0d690 100644
--- a/compiler/typecheck/TcTyClsDecls.hs
+++ b/compiler/typecheck/TcTyClsDecls.hs
@@ -2538,8 +2538,8 @@ checkValidTyConTyVars tc
-------------------------------
checkValidDataCon :: DynFlags -> Bool -> TyCon -> DataCon -> TcM ()
checkValidDataCon dflags existential_ok tc con
- = setSrcSpan (srcLocSpan (getSrcLoc con)) $
- addErrCtxt (dataConCtxt con) $
+ = setSrcSpan (getSrcSpan con) $
+ addErrCtxt (dataConCtxt con) $
do { -- Check that the return type of the data constructor
-- matches the type constructor; eg reject this:
-- data T a where { MkT :: Bogus a }
diff --git a/testsuite/tests/gadt/T14719.hs b/testsuite/tests/gadt/T14719.hs
new file mode 100644
index 0000000000..004116dcc6
--- /dev/null
+++ b/testsuite/tests/gadt/T14719.hs
@@ -0,0 +1,8 @@
+{-# LANGUAGE GADTs #-}
+module T14719 where
+
+data Foo1 where
+ MkFoo1 :: Bool
+
+newtype Foo2 where
+ MkFoo2 :: Foo2
diff --git a/testsuite/tests/gadt/T14719.stderr b/testsuite/tests/gadt/T14719.stderr
new file mode 100644
index 0000000000..cfac00c0c0
--- /dev/null
+++ b/testsuite/tests/gadt/T14719.stderr
@@ -0,0 +1,18 @@
+
+T14719.hs:5:3: error:
+ • Data constructor ‘MkFoo1’ returns type ‘Bool’
+ instead of an instance of its parent type ‘Foo1’
+ • In the definition of data constructor ‘MkFoo1’
+ In the data type declaration for ‘Foo1’
+ |
+5 | MkFoo1 :: Bool
+ | ^^^^^^^^^^^^^^
+
+T14719.hs:8:3: error:
+ • The constructor of a newtype must have exactly one field
+ but ‘MkFoo2’ has none
+ • In the definition of data constructor ‘MkFoo2’
+ In the newtype declaration for ‘Foo2’
+ |
+8 | MkFoo2 :: Foo2
+ | ^^^^^^^^^^^^^^
diff --git a/testsuite/tests/gadt/all.T b/testsuite/tests/gadt/all.T
index c81ab80c04..59ec307d58 100644
--- a/testsuite/tests/gadt/all.T
+++ b/testsuite/tests/gadt/all.T
@@ -115,3 +115,4 @@ test('T9380', normal, compile_and_run, [''])
test('T12087', normal, compile_fail, [''])
test('T12468', normal, compile_fail, [''])
test('T14320', normal, compile, [''])
+test('T14719', normal, compile_fail, ['-fdiagnostics-show-caret'])
diff --git a/testsuite/tests/polykinds/T9222.stderr b/testsuite/tests/polykinds/T9222.stderr
index 6e143e0cf9..604cc1b7ec 100644
--- a/testsuite/tests/polykinds/T9222.stderr
+++ b/testsuite/tests/polykinds/T9222.stderr
@@ -5,12 +5,12 @@ T9222.hs:13:3: error:
inside the constraints: a ~ '(b0, c0)
bound by the type of the constructor ‘Want’:
(a ~ '(b0, c0)) => Proxy b0
- at T9222.hs:13:3
+ at T9222.hs:13:3-43
‘c’ is a rigid type variable bound by
the type of the constructor ‘Want’:
forall i1 j1 (a :: (i1, j1)) (b :: i1) (c :: j1).
((a ~ '(b, c)) => Proxy b) -> Want a
- at T9222.hs:13:3
+ at T9222.hs:13:3-43
• In the ambiguity check for ‘Want’
To defer the ambiguity check to use sites, enable AllowAmbiguousTypes
In the definition of data constructor ‘Want’