Test #8428
authorKrzysztof Gogolewski <krz.gogolewski@gmail.com>
Wed, 9 Oct 2013 20:10:50 +0000 (22:10 +0200)
committerKrzysztof Gogolewski <krz.gogolewski@gmail.com>
Wed, 9 Oct 2013 20:10:50 +0000 (22:10 +0200)
testsuite/tests/typecheck/should_fail/T8428.hs [new file with mode: 0644]
testsuite/tests/typecheck/should_fail/T8428.stderr [new file with mode: 0644]
testsuite/tests/typecheck/should_fail/all.T

diff --git a/testsuite/tests/typecheck/should_fail/T8428.hs b/testsuite/tests/typecheck/should_fail/T8428.hs
new file mode 100644 (file)
index 0000000..b10bf32
--- /dev/null
@@ -0,0 +1,13 @@
+{-# LANGUAGE RankNTypes #-}
+{-# LANGUAGE ImpredicativeTypes #-}
+
+module T8428 where
+
+import Control.Monad.ST
+
+data IdentityT m a = IdentityT { runIdentityT :: m a }
+
+runIdST :: IdentityT (forall s. ST s) a -> a
+runIdST = runST . runIdentityT
+-- Test formatting in the error message.
+-- In fact this should be rejected as a kind error (#8388)
diff --git a/testsuite/tests/typecheck/should_fail/T8428.stderr b/testsuite/tests/typecheck/should_fail/T8428.stderr
new file mode 100644 (file)
index 0000000..2351351
--- /dev/null
@@ -0,0 +1,10 @@
+
+T8428.hs:11:19:
+    Couldn't match type ‛(forall s. ST s) a’ with ‛forall s. ST s a’
+    Expected type: IdentityT (forall s. ST s) a -> forall s. ST s a
+      Actual type: IdentityT (forall s. ST s) a -> (forall s. ST s) a
+    Relevant bindings include
+      runIdST :: IdentityT (forall s. ST s) a -> a
+        (bound at T8428.hs:11:1)
+    In the second argument of ‛(.)’, namely ‛runIdentityT’
+    In the expression: runST . runIdentityT
index bf11f6c..0abc6c7 100644 (file)
@@ -321,4 +321,4 @@ test('TcCoercibleFailSafe', when(compiler_lt('ghc', '7.7'), skip), compile_fail,
 test('TcCoercibleFail2', when(compiler_lt('ghc', '7.7'), skip), compile_fail, [''])
 test('T8306', normal, compile_fail, [''])
 test('T8392a', normal, compile_fail, [''])
-
+test('T8428', normal, compile_fail, [''])