testsuite: Add tests from #11982
authorBen Gamari <ben@smart-cactus.org>
Tue, 22 Jan 2019 16:27:30 +0000 (11:27 -0500)
committerBen Gamari <ben@smart-cactus.org>
Sun, 27 Jan 2019 13:32:12 +0000 (08:32 -0500)
testsuite/tests/typecheck/should_compile/T11982a.hs [new file with mode: 0644]
testsuite/tests/typecheck/should_compile/T11982b.hs [new file with mode: 0644]
testsuite/tests/typecheck/should_compile/T11982c.hs [new file with mode: 0644]
testsuite/tests/typecheck/should_compile/all.T

diff --git a/testsuite/tests/typecheck/should_compile/T11982a.hs b/testsuite/tests/typecheck/should_compile/T11982a.hs
new file mode 100644 (file)
index 0000000..1928bf2
--- /dev/null
@@ -0,0 +1,7 @@
+{-# LANGUAGE MonadComprehensions, ParallelListComp #-}
+
+module Foo where
+
+foo xs ys = [ (f y True, f x 'c')
+            | let f _ z = z, x <- xs
+            | y <- ys ]
diff --git a/testsuite/tests/typecheck/should_compile/T11982b.hs b/testsuite/tests/typecheck/should_compile/T11982b.hs
new file mode 100644 (file)
index 0000000..5c695d2
--- /dev/null
@@ -0,0 +1,17 @@
+{-# LANGUAGE RankNTypes #-}
+{-# LANGUAGE ApplicativeDo #-}
+module Main where
+import Control.Concurrent.MVar
+
+type Locker = forall a. IO a -> IO a
+
+main :: IO ()
+main = do
+    line <- getLine
+    lock <- newMVar ()
+    let locker :: Locker
+        locker = withMVar lock . const
+    f line locker
+
+f :: String -> Locker -> IO ()
+f line locker = locker $ putStrLn line
diff --git a/testsuite/tests/typecheck/should_compile/T11982c.hs b/testsuite/tests/typecheck/should_compile/T11982c.hs
new file mode 100644 (file)
index 0000000..cdc4a98
--- /dev/null
@@ -0,0 +1,18 @@
+-- This is similar to T11982b but 'locker' inlined which allows the module to
+-- compile.
+
+{-# LANGUAGE RankNTypes #-}
+{-# LANGUAGE ApplicativeDo #-}
+module Main where
+import Control.Concurrent.MVar
+
+type Locker = forall a. IO a -> IO a
+
+main :: IO ()
+main = do
+    line <- getLine
+    lock <- newMVar ()
+    f line $ withMVar lock . const
+
+f :: String -> Locker -> IO ()
+f line locker = locker $ putStrLn line
index 3ad727d..b032121 100644 (file)
@@ -511,6 +511,9 @@ test('T11811', normal, compile, [''])
 test('T11793', normal, compile, [''])
 test('T11348', normal, compile, [''])
 test('T11947', normal, compile, [''])
+test('T11982a', expect_broken(11982), compile, [''])
+test('T11982b', expect_broken(11982), compile, [''])
+test('T11982c', normal, compile, [''])
 test('T12045a', normal, compile, [''])
 test('T12064', [], multimod_compile, ['T12064', '-v0'])
 test('ExPat', normal, compile, [''])