summaryrefslogtreecommitdiff
path: root/testsuite/tests/gadt/Session.hs
diff options
context:
space:
mode:
Diffstat (limited to 'testsuite/tests/gadt/Session.hs')
-rw-r--r--testsuite/tests/gadt/Session.hs45
1 files changed, 45 insertions, 0 deletions
diff --git a/testsuite/tests/gadt/Session.hs b/testsuite/tests/gadt/Session.hs
new file mode 100644
index 0000000000..4403b6f869
--- /dev/null
+++ b/testsuite/tests/gadt/Session.hs
@@ -0,0 +1,45 @@
+{-# LANGUAGE GADTs, KindSignatures #-}
+
+-- See Trac #1323; crashed GHC 6.6
+
+module Main where
+
+data Zero = Zero
+ deriving (Show)
+
+-- Change this newtype to a data and all's well
+-- and it's not like the class restriction actually restricts
+-- the type rather than the constructor
+newtype Succ p = Succ p deriving (Show)
+
+class TyNum a where
+instance TyNum Zero where
+instance (TyNum p) => TyNum (Succ p) where
+
+data List :: * -> * -> * where
+ Nil :: List a Zero
+ Cons :: (TyNum p) => a -> List a p -> List a (Succ p)
+
+instance (Show a) => Show (List a l) where
+ show Nil = "Nil"
+ show (Cons a t) = "Cons " ++ (show a) ++ " (" ++ (show t) ++ ")"
+
+zipL :: List a l -> List b l -> List (a, b) l
+zipL Nil Nil = Nil -- this line is fine
+zipL (Cons l ls) (Cons r rs) = Cons (l,r) (zipL ls rs) -- this line blows up
+
+l1 = Cons 5 (Cons 3 Nil)
+l2 = Cons True (Cons False Nil)
+
+main = print $ zipL l1 l2
+
+{-
+$ ghc --make Test.hs
+[1 of 1] Compiling Main ( Test.hs, Test.o )
+ghc-6.6: panic! (the 'impossible' happened)
+ (GHC version 6.6 for x86_64-unknown-linux):
+ Pattern match failure in do expression at simplCore/Simplify.lhs:1540:8-21
+
+Please report this as a GHC bug: http://www.haskell.org/ghc/reportabug
+-}
+