[commit: ghc] ghc-8.4: Add regression test for #14040 (0d40693)

git at git.haskell.org git at git.haskell.org
Sun Jan 14 22:08:07 UTC 2018


Repository : ssh://git@git.haskell.org/ghc

On branch  : ghc-8.4
Link       : http://ghc.haskell.org/trac/ghc/changeset/0d40693654678e6a8ce8a63d198420c88e11dcff/ghc

>---------------------------------------------------------------

commit 0d40693654678e6a8ce8a63d198420c88e11dcff
Author: Ryan Scott <ryan.gl.scott at gmail.com>
Date:   Tue Dec 12 10:16:39 2017 -0500

    Add regression test for #14040
    
    This adds a regression test for the original program in #14040.
    
    This does not fix #14040 entirely, though, as the program in
    https://ghc.haskell.org/trac/ghc/ticket/14040#comment:2 still
    panics, so there is more work to be done there.
    
    (cherry picked from commit be1ca0e439e9d26107c7d82fe6e78b64ee6320a9)


>---------------------------------------------------------------

0d40693654678e6a8ce8a63d198420c88e11dcff
 .../tests/partial-sigs/should_fail/T14040a.hs      | 34 +++++++++++++++
 .../tests/partial-sigs/should_fail/T14040a.stderr  | 48 ++++++++++++++++++++++
 testsuite/tests/partial-sigs/should_fail/all.T     |  1 +
 3 files changed, 83 insertions(+)

diff --git a/testsuite/tests/partial-sigs/should_fail/T14040a.hs b/testsuite/tests/partial-sigs/should_fail/T14040a.hs
new file mode 100644
index 0000000..382e218
--- /dev/null
+++ b/testsuite/tests/partial-sigs/should_fail/T14040a.hs
@@ -0,0 +1,34 @@
+{-# LANGUAGE GADTs #-}
+{-# LANGUAGE RankNTypes #-}
+{-# LANGUAGE ScopedTypeVariables #-}
+{-# LANGUAGE TypeApplications #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE TypeInType #-}
+module T14040a where
+
+import Data.Kind
+
+data family Sing (a :: k)
+
+data WeirdList :: Type -> Type where
+  WeirdNil  :: WeirdList a
+  WeirdCons :: a -> WeirdList (WeirdList a) -> WeirdList a
+
+data instance Sing (z :: WeirdList a) where
+  SWeirdNil  :: Sing WeirdNil
+  SWeirdCons :: Sing w -> Sing wws -> Sing (WeirdCons w wws)
+
+elimWeirdList :: forall (a :: Type) (wl :: WeirdList a)
+                        (p :: forall (x :: Type). x -> WeirdList x -> Type).
+                 Sing wl
+              -> (forall (y :: Type). p _ WeirdNil)
+              -> (forall (z :: Type) (x :: z) (xs :: WeirdList (WeirdList z)).
+                    Sing x -> Sing xs -> p _ xs
+                  -> p _ (WeirdCons x xs))
+              -> p _ wl
+elimWeirdList SWeirdNil pWeirdNil _ = pWeirdNil
+elimWeirdList (SWeirdCons (x :: Sing (x :: z))
+                          (xs :: Sing (xs :: WeirdList (WeirdList z))))
+              pWeirdNil pWeirdCons
+  = pWeirdCons @z @x @xs x xs
+      (elimWeirdList @(WeirdList z) @xs @p xs pWeirdNil pWeirdCons)
diff --git a/testsuite/tests/partial-sigs/should_fail/T14040a.stderr b/testsuite/tests/partial-sigs/should_fail/T14040a.stderr
new file mode 100644
index 0000000..b4f0e26
--- /dev/null
+++ b/testsuite/tests/partial-sigs/should_fail/T14040a.stderr
@@ -0,0 +1,48 @@
+
+T14040a.hs:21:18: error:
+    • The kind of variable ‘wl1’, namely ‘WeirdList a1’,
+      depends on variable ‘a1’ from an inner scope
+      Perhaps bind ‘wl1’ sometime after binding ‘a1’
+    • In the type signature:
+        elimWeirdList :: forall (a :: Type)
+                                (wl :: WeirdList a)
+                                (p :: forall (x :: Type). x -> WeirdList x -> Type).
+                         Sing wl
+                         -> (forall (y :: Type). p _ WeirdNil)
+                            -> (forall (z :: Type) (x :: z) (xs :: WeirdList (WeirdList z)).
+                                Sing x -> Sing xs -> p _ xs -> p _ (WeirdCons x xs))
+                               -> p _ wl
+
+T14040a.hs:34:8: error:
+    • Cannot apply expression of type ‘Sing wl
+                                       -> (forall y. p x0 w0 'WeirdNil)
+                                       -> (forall z1 (x :: z1) (xs :: WeirdList (WeirdList z1)).
+                                           Sing x
+                                           -> Sing xs
+                                           -> p (WeirdList z1) w1 xs
+                                           -> p z1 w2 ('WeirdCons x xs))
+                                       -> p a w3 wl’
+      to a visible type argument ‘(WeirdList z)’
+    • In the sixth argument of ‘pWeirdCons’, namely
+        ‘(elimWeirdList @(WeirdList z) @xs @p xs pWeirdNil pWeirdCons)’
+      In the expression:
+        pWeirdCons
+          @z
+          @x
+          @xs
+          x
+          xs
+          (elimWeirdList @(WeirdList z) @xs @p xs pWeirdNil pWeirdCons)
+      In an equation for ‘elimWeirdList’:
+          elimWeirdList
+            (SWeirdCons (x :: Sing (x :: z))
+                        (xs :: Sing (xs :: WeirdList (WeirdList z))))
+            pWeirdNil
+            pWeirdCons
+            = pWeirdCons
+                @z
+                @x
+                @xs
+                x
+                xs
+                (elimWeirdList @(WeirdList z) @xs @p xs pWeirdNil pWeirdCons)
diff --git a/testsuite/tests/partial-sigs/should_fail/all.T b/testsuite/tests/partial-sigs/should_fail/all.T
index 36ea6cb..b974ce8 100644
--- a/testsuite/tests/partial-sigs/should_fail/all.T
+++ b/testsuite/tests/partial-sigs/should_fail/all.T
@@ -64,6 +64,7 @@ test('PatBind3', normal, compile_fail, [''])
 test('T12039', normal, compile_fail, [''])
 test('T12634', normal, compile_fail, [''])
 test('T12732', normal, compile_fail, ['-fobject-code -fdefer-typed-holes'])
+test('T14040a', normal, compile_fail, [''])
 test('T14449', normal, compile_fail, [''])
 test('T14479', normal, compile_fail, [''])
 test('T14584', normal, compile, [''])



More information about the ghc-commits mailing list