Teat Trac #7220
authorSimon Peyton Jones <simonpj@microsoft.com>
Wed, 31 Oct 2012 17:04:09 +0000 (17:04 +0000)
committerSimon Peyton Jones <simonpj@microsoft.com>
Wed, 31 Oct 2012 17:04:09 +0000 (17:04 +0000)
testsuite/tests/typecheck/should_fail/T7220.hs [new file with mode: 0644]
testsuite/tests/typecheck/should_fail/T7220.stderr [new file with mode: 0644]
testsuite/tests/typecheck/should_fail/all.T

diff --git a/testsuite/tests/typecheck/should_fail/T7220.hs b/testsuite/tests/typecheck/should_fail/T7220.hs
new file mode 100644 (file)
index 0000000..36ae54a
--- /dev/null
@@ -0,0 +1,48 @@
+{-# LANGUAGE FlexibleContexts #-}
+{-# LANGUAGE FunctionalDependencies #-}
+{-# LANGUAGE MultiParamTypeClasses #-}
+{-# LANGUAGE RankNTypes #-}
+{-# LANGUAGE TypeFamilies #-}
+
+module Test2 where
+
+class C a b | b -> a
+
+data A = A
+data X = X
+data Y = Y
+
+type family TF b
+
+f :: (forall b. (C a b, TF b ~ Y) => b) -> X
+f _ = undefined
+
+u :: (C A b, TF b ~ Y) => b
+u = undefined
+
+v :: X
+v = (f :: (forall b. (C A b, TF b ~ Y) => b) -> X) u -- This line causes an error (see below)
+
+{-
+GHC 7.6.1-rc1 (7.6.0.20120810) rejects this code with the following error message.
+
+Test2.hs:24:52:
+    Couldn't match expected type `Y'
+                with actual type `TF (forall b. (C A b, TF b ~ Y) => b)'
+    In the first argument of `f ::
+                                (forall b. (C A b, TF b ~ Y) => b) -> X', namely
+      `u'
+    In the expression: (f :: (forall b. (C A b, TF b ~ Y) => b) -> X) u
+    In an equation for `v':
+        v = (f :: (forall b. (C A b, TF b ~ Y) => b) -> X) u
+
+GHC 7.4.1 rejected this code with a different error message:
+
+Test2.hs:24:6:
+    Cannot deal with a type function under a forall type:
+    forall b. (C A b, TF b ~ Y) => b
+    In the expression: f :: (forall b. (C A b, TF b ~ Y) => b) -> X
+    In the expression: (f :: (forall b. (C A b, TF b ~ Y) => b) -> X) u
+    In an equation for `v':
+        v = (f :: (forall b. (C A b, TF b ~ Y) => b) -> X) u
+-}
\ No newline at end of file
diff --git a/testsuite/tests/typecheck/should_fail/T7220.stderr b/testsuite/tests/typecheck/should_fail/T7220.stderr
new file mode 100644 (file)
index 0000000..5086014
--- /dev/null
@@ -0,0 +1,9 @@
+
+T7220.hs:24:6:
+    Cannot instantiate unification variable `b0'
+    with a type involving foralls: forall b. (C A b, TF b ~ Y) => b
+      Perhaps you want -XImpredicativeTypes
+    In the expression: f :: (forall b. (C A b, TF b ~ Y) => b) -> X
+    In the expression: (f :: (forall b. (C A b, TF b ~ Y) => b) -> X) u
+    In an equation for `v':
+        v = (f :: (forall b. (C A b, TF b ~ Y) => b) -> X) u
index 7e97f72..624dd5c 100644 (file)
@@ -286,3 +286,4 @@ test('T6161', normal, compile_fail, [''])
 test('T7368', normal, compile_fail, [''])
 test('T7264', normal, compile_fail, [''])
 test('T6069', normal, compile_fail, [''])
+test('T7220', normal, compile_fail, [''])