Test Trac #8030
authorSimon Peyton Jones <simonpj@microsoft.com>
Wed, 8 Apr 2015 08:43:20 +0000 (09:43 +0100)
committerSimon Peyton Jones <simonpj@microsoft.com>
Wed, 8 Apr 2015 08:44:42 +0000 (09:44 +0100)
testsuite/tests/typecheck/should_fail/T8030.hs [new file with mode: 0644]
testsuite/tests/typecheck/should_fail/T8030.stderr [new file with mode: 0644]
testsuite/tests/typecheck/should_fail/all.T

diff --git a/testsuite/tests/typecheck/should_fail/T8030.hs b/testsuite/tests/typecheck/should_fail/T8030.hs
new file mode 100644 (file)
index 0000000..970ae9b
--- /dev/null
@@ -0,0 +1,11 @@
+{-# LANGUAGE PolyKinds, FlexibleContexts, TypeFamilies #-}
+module T8030 where
+
+-- The types of op1 and op2 are both ambiguous
+-- and should be reported as such
+
+class C (a :: k) where
+  type Pr a :: *
+  op1 :: Pr a
+  op2 :: Pr a -> Pr a -> Pr a
+
diff --git a/testsuite/tests/typecheck/should_fail/T8030.stderr b/testsuite/tests/typecheck/should_fail/T8030.stderr
new file mode 100644 (file)
index 0000000..8dd752e
--- /dev/null
@@ -0,0 +1,24 @@
+
+T8030.hs:9:3:
+    Couldn't match expected type ‘Pr a’ with actual type ‘Pr a0’
+    NB: ‘Pr’ is a type function, and may not be injective
+    The type variable ‘a0’ is ambiguous
+    In the ambiguity check for the type signature for ‘op1’:
+      op1 :: forall (k :: BOX) (a :: k). C a => Pr a
+    To defer the ambiguity check to use sites, enable AllowAmbiguousTypes
+    When checking the class method:
+      op1 :: forall (k :: BOX) (a :: k). C a => Pr a
+    In the class declaration for ‘C’
+
+T8030.hs:10:3:
+    Couldn't match type ‘Pr a0’ with ‘Pr a’
+    NB: ‘Pr’ is a type function, and may not be injective
+    The type variable ‘a0’ is ambiguous
+    Expected type: Pr a -> Pr a -> Pr a
+      Actual type: Pr a0 -> Pr a0 -> Pr a0
+    In the ambiguity check for the type signature for ‘op2’:
+      op2 :: forall (k :: BOX) (a :: k). C a => Pr a -> Pr a -> Pr a
+    To defer the ambiguity check to use sites, enable AllowAmbiguousTypes
+    When checking the class method:
+      op2 :: forall (k :: BOX) (a :: k). C a => Pr a -> Pr a -> Pr a
+    In the class declaration for ‘C’
index 9b71388..5d31bcd 100644 (file)
@@ -355,3 +355,4 @@ test('T4921', normal, compile_fail, [''])
 test('T9605', normal, compile_fail, [''])
 test('T9999', normal, compile_fail, [''])
 test('T10194', normal, compile_fail, [''])
+test('T8030', normal, compile_fail, [''])