Test case for #10698
authorJoachim Breitner <mail@joachim-breitner.de>
Tue, 28 Jul 2015 11:19:34 +0000 (13:19 +0200)
committerJoachim Breitner <mail@joachim-breitner.de>
Tue, 28 Jul 2015 11:23:07 +0000 (13:23 +0200)
the expected error message is from an older version of GHC; I don’t know
the exact error message that we should get here until the bug is
fixed...

testsuite/tests/typecheck/should_fail/T10698.hs [new file with mode: 0644]
testsuite/tests/typecheck/should_fail/T10698.stderr [new file with mode: 0644]
testsuite/tests/typecheck/should_fail/all.T

diff --git a/testsuite/tests/typecheck/should_fail/T10698.hs b/testsuite/tests/typecheck/should_fail/T10698.hs
new file mode 100644 (file)
index 0000000..512a882
--- /dev/null
@@ -0,0 +1,23 @@
+{-# LANGUAGE RoleAnnotations #-}
+
+module T10698 where
+import Data.Coerce
+
+data Map k a  = Map k a
+type role Map nominal representational
+
+map1 :: (k1->k2) -> Map k1 a -> Map k2 a
+map1 f (Map a b) = Map (f a) b
+{-# NOINLINE  [1] map1 #-}
+{-# RULES
+"map1/coerce" map1 coerce = coerce
+ #-}
+
+
+map2 :: (a -> b) -> Map k a -> Map k b
+map2 f (Map a b) = Map a (f b)
+{-# NOINLINE [1] map2 #-}
+
+{-# RULES
+"map2/coerce" map2 coerce = coerce
+ #-}
diff --git a/testsuite/tests/typecheck/should_fail/T10698.stderr b/testsuite/tests/typecheck/should_fail/T10698.stderr
new file mode 100644 (file)
index 0000000..fa3aa5f
--- /dev/null
@@ -0,0 +1,10 @@
+
+T10698.hs:13:29:
+    Could not coerce from ‘Map k1 a’ to ‘Map k2 a’
+      because the first type argument of ‘Map’ has role Nominal,
+      but the arguments ‘k1’ and ‘k2’ differ
+      arising from a use of ‘coerce’
+    from the context (Coercible k1 k2)
+      bound by the RULE "map1/coerce" at T10698.hs:13:1-34
+    In the expression: coerce
+    When checking the transformation rule "map1/coerce"
index fbbeddb..bc2b3c9 100644 (file)
@@ -374,3 +374,4 @@ test('ExpandSynsFail1', normal, compile_fail, ['-fprint-expanded-synonyms'])
 test('ExpandSynsFail2', normal, compile_fail, ['-fprint-expanded-synonyms'])
 test('ExpandSynsFail3', normal, compile_fail, ['-fprint-expanded-synonyms'])
 test('ExpandSynsFail4', normal, compile_fail, ['-fprint-expanded-synonyms'])
+test('T10698', expect_broken(10698), compile_fail, [''])