New kind-polymorphic core
authorJose Pedro Magalhaes <jpm@cs.uu.nl>
Fri, 11 Nov 2011 09:07:50 +0000 (09:07 +0000)
committerJose Pedro Magalhaes <jpm@cs.uu.nl>
Fri, 11 Nov 2011 09:07:50 +0000 (09:07 +0000)
This big patch implements a kind-polymorphic core for GHC. The current
implementation focuses on making sure that all kind-monomorphic programs still
work in the new core; it is not yet guaranteed that kind-polymorphic programs
(using the new -XPolyKinds flag) will work.

For more information, see http://haskell.org/haskellwiki/GHC/Kinds

68 files changed:
testsuite/tests/driver/T4437.hs
testsuite/tests/gadt/gadt10.stderr
testsuite/tests/gadt/rw.stderr
testsuite/tests/indexed-types/should_fail/SimpleFail14.stderr
testsuite/tests/indexed-types/should_fail/SimpleFail1a.stderr
testsuite/tests/indexed-types/should_fail/SimpleFail1b.stderr
testsuite/tests/indexed-types/should_fail/SimpleFail4.hs
testsuite/tests/indexed-types/should_fail/T2664.stderr
testsuite/tests/indexed-types/should_fail/all.T
testsuite/tests/perf/compiler/all.T
testsuite/tests/rename/should_fail/rnfail057.hs
testsuite/tests/rename/should_fail/rnfail057.stderr
testsuite/tests/safeHaskell/safeLanguage/SafeLang12.stderr
testsuite/tests/simplCore/should_compile/T4201.stdout
testsuite/tests/simplCore/should_compile/rule2.stderr
testsuite/tests/simplCore/should_compile/simpl017.stderr
testsuite/tests/th/T3319.stderr
testsuite/tests/th/T5290.stderr
testsuite/tests/th/TH_foreignInterruptible.stderr
testsuite/tests/th/TH_genEx.stderr
testsuite/tests/typecheck/should_compile/T5581.hs
testsuite/tests/typecheck/should_compile/all.T
testsuite/tests/typecheck/should_compile/tc056.stderr
testsuite/tests/typecheck/should_compile/tc255.hs
testsuite/tests/typecheck/should_compile/tc256.hs
testsuite/tests/typecheck/should_compile/tc257.hs
testsuite/tests/typecheck/should_compile/tc258.hs
testsuite/tests/typecheck/should_fail/AssocTyDef06.stderr
testsuite/tests/typecheck/should_fail/T2688.stderr
testsuite/tests/typecheck/should_fail/T2994.stderr
testsuite/tests/typecheck/should_fail/T3540.stderr
testsuite/tests/typecheck/should_fail/T3950.stderr
testsuite/tests/typecheck/should_fail/T5573a.stderr
testsuite/tests/typecheck/should_fail/all.T
testsuite/tests/typecheck/should_fail/mc19.stderr
testsuite/tests/typecheck/should_fail/mc21.stderr
testsuite/tests/typecheck/should_fail/mc22.stderr
testsuite/tests/typecheck/should_fail/tcfail028.stderr
testsuite/tests/typecheck/should_fail/tcfail065.stderr
testsuite/tests/typecheck/should_fail/tcfail068.stderr
testsuite/tests/typecheck/should_fail/tcfail087.stderr
testsuite/tests/typecheck/should_fail/tcfail090.stderr
testsuite/tests/typecheck/should_fail/tcfail103.stderr
testsuite/tests/typecheck/should_fail/tcfail108.stderr
testsuite/tests/typecheck/should_fail/tcfail110.stderr
testsuite/tests/typecheck/should_fail/tcfail115.stderr
testsuite/tests/typecheck/should_fail/tcfail122.stderr
testsuite/tests/typecheck/should_fail/tcfail123.stderr
testsuite/tests/typecheck/should_fail/tcfail136.stderr
testsuite/tests/typecheck/should_fail/tcfail146.stderr
testsuite/tests/typecheck/should_fail/tcfail147.stderr
testsuite/tests/typecheck/should_fail/tcfail148.stderr
testsuite/tests/typecheck/should_fail/tcfail151.hs
testsuite/tests/typecheck/should_fail/tcfail159.stderr
testsuite/tests/typecheck/should_fail/tcfail162.stderr
testsuite/tests/typecheck/should_fail/tcfail174.stderr
testsuite/tests/typecheck/should_fail/tcfail179.stderr
testsuite/tests/typecheck/should_fail/tcfail191.stderr
testsuite/tests/typecheck/should_fail/tcfail192.stderr
testsuite/tests/typecheck/should_fail/tcfail193.stderr
testsuite/tests/typecheck/should_fail/tcfail200.stderr
testsuite/tests/typecheck/should_fail/tcfail201.stderr
testsuite/tests/typecheck/should_fail/tcfail206.stderr
testsuite/tests/typecheck/should_fail/tcfail210.stderr
testsuite/tests/typecheck/should_fail/tcfail213.hs
testsuite/tests/typecheck/should_fail/tcfail213.stderr
testsuite/tests/typecheck/should_fail/tcfail214.hs
testsuite/tests/typecheck/should_fail/tcfail214.stderr

index d1b12aa..b7ae6fd 100644 (file)
@@ -38,7 +38,8 @@ expectedGhcOnlyExtensions = ["ParallelArrays",
                              "AlternativeLayoutRule",
                              "AlternativeLayoutRuleTransitional",
                              "MonadComprehensions",
-                             "TraditionalRecordSyntax"]
+                             "TraditionalRecordSyntax",
+                             "PolyKinds"]
 
 expectedCabalOnlyExtensions :: [String]
 expectedCabalOnlyExtensions = ["Generics",
index 100c84b..7858f51 100644 (file)
@@ -1,7 +1,7 @@
 
 gadt10.hs:6:24:
     `RInt' is not applied to enough type arguments
-    Expected kind `?', but `RInt' has kind `k0 -> *'
+    Expected kind `??', but `RInt' has kind `k0 -> *'
     In the type `RInt'
     In the definition of data constructor `R'
     In the data type declaration for `RInt'
index dbac243..612c809 100644 (file)
@@ -1,19 +1,20 @@
 
-rw.hs:14:47:
+rw.hs:14:42:
     Couldn't match type `a' with `Int'
       `a' is a rigid type variable bound by
           the type signature for writeInt :: T a -> IORef a -> IO ()
           at rw.hs:13:1
-    In the second argument of `writeIORef', namely `(1 :: Int)'
+    Expected type: IORef Int
+      Actual type: IORef a
+    In the first argument of `writeIORef', namely `ref'
     In the expression: writeIORef ref (1 :: Int)
-    In a case alternative: ~(Li x) -> writeIORef ref (1 :: Int)
 
-rw.hs:19:51:
+rw.hs:19:34:
     Couldn't match type `a' with `Bool'
       `a' is a rigid type variable bound by
           the type signature for readBool :: T a -> IORef a -> IO ()
           at rw.hs:17:1
-    Expected type: a -> Bool
-      Actual type: Bool -> Bool
-    In the second argument of `(.)', namely `not'
-    In the second argument of `(>>=)', namely `(print . not)'
+    Expected type: IORef Bool
+      Actual type: IORef a
+    In the first argument of `readIORef', namely `ref'
+    In the first argument of `(>>=)', namely `readIORef ref'
index 42bc53d..b001e55 100644 (file)
@@ -1,7 +1,7 @@
 
 SimpleFail14.hs:5:15:
     Predicate `a ~ a' used as a type
-    Expected kind `?', but `a ~ a' has kind `Constraint'
+    Expected kind `??', but `a ~ a' has kind `Constraint'
     In the type `a ~ a'
     In the definition of data constructor `T'
     In the data type declaration for `T'
index 6bbbb32..24be6db 100644 (file)
@@ -1,4 +1,4 @@
 
 SimpleFail1a.hs:4:1:
-    Family instance has too few parameters; expected 2
+    Number of parameters must match family declaration; expected 2
     In the data type instance declaration for `T1'
index 8ac486e..3677317 100644 (file)
@@ -1,5 +1,4 @@
 
 SimpleFail1b.hs:4:1:
-    Kind mis-match
-    Expected kind `* -> * -> k0 -> k1', but `T1' has kind `* -> * -> *'
+    Number of parameters must match family declaration; expected 2
     In the data type instance declaration for `T1'
index de674a3..dad09a2 100644 (file)
@@ -1,4 +1,4 @@
-{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE TypeFamilies, MultiParamTypeClasses #-}
 
 module ShouldFail where
 
index b3b8428..bba0274 100644 (file)
@@ -1,6 +1,6 @@
 
-T2664.hs:31:33:
-    Could not deduce (Dual a ~ Dual b)
+T2664.hs:31:17:
+    Could not deduce (b ~ a)
     from the context (Connect a, Connect b)
       bound by the instance declaration at T2664.hs:22:10-52
     or from ((a :*: b) ~ Dual c, c ~ Dual (a :*: b))
@@ -8,11 +8,13 @@ T2664.hs:31:33:
                  newPChan :: ((a :*: b) ~ Dual c, c ~ Dual (a :*: b)) =>
                              IO (PChan (a :*: b), PChan c)
       at T2664.hs:(23,5)-(31,87)
-    NB: `Dual' is a type function, and may not be injective
-    Expected type: c
-      Actual type: Dual b :+: Dual a
-    Expected type: PChan c
-      Actual type: PChan (Dual b :+: Dual a)
-    In the return type of a call of `E'
-    In the expression:
-      E (pchoose Right v newPChan) (pchoose Left v newPChan)
+      `b' is a rigid type variable bound by
+          the instance declaration at T2664.hs:22:30
+      `a' is a rigid type variable bound by
+          the instance declaration at T2664.hs:22:19
+    Expected type: PChan (a :*: b)
+      Actual type: PChan (b :*: a)
+    In the expression: O $ takeMVar v
+    In the first argument of `return', namely
+      `(O $ takeMVar v, 
+        E (pchoose Right v newPChan) (pchoose Left v newPChan))'
index 15eefb6..2bf23f0 100644 (file)
@@ -58,7 +58,7 @@ test('T4093a', normal, compile_fail, [''])
 test('T4093b', normal, compile_fail, [''])
 test('T3330a', reqlib('mtl'), compile_fail, [''])
 test('T3330b', normal, compile_fail, [''])
-test('T3330c', normal, compile_fail, [''])
+test('T3330c', expect_fail, compile_fail, [''])
 test('T4179', normal, compile_fail, [''])
 test('T4254', normal, compile_fail, [''])
 test('T2239', normal, compile_fail, [''])
index 7edc636..1ff54b0 100644 (file)
@@ -133,7 +133,7 @@ test('T3064',
       # expected value: 108937496 (amd64/Linux) (28/6/2011):
       if_wordsize(64,
           compiler_stats_num_field('bytes allocated', 110000000,
-                                                      140000000)),
+                                                      150000000)),
       # expected value: 2247016 (x86/Linux) (28/6/2011):
       if_wordsize(32,
           compiler_stats_num_field('max_bytes_used', 2000000,
@@ -160,7 +160,7 @@ test('T5030',
       # expected value: 1255998208 (amd64/Linux):
       if_wordsize(64,
           compiler_stats_num_field('bytes allocated', 1200000000,
-                                                      1300000000)),
+                                                      1330000000)),
        only_ways(['normal'])
       ],
      compile,
index df06881..88b5565 100644 (file)
@@ -1,3 +1,5 @@
+{-# LANGUAGE KindSignatures #-}
+
 module BindKindName where
 
 type Foo (a :: DontExistKind) = a
index 556fab6..79a5ac7 100644 (file)
@@ -1,4 +1,3 @@
 
-rnfail057.hs:3:16:
-    Unexpected named kind:
-        DontExistKind
+rnfail057.hs:5:16:
+    Not in scope: type constructor or class `DontExistKind'
index 03c4d1a..1173161 100644 (file)
@@ -6,5 +6,6 @@ SafeLang12_B.hs:2:14:
     Warning: -XTemplateHaskell is not allowed in Safe Haskell; ignoring -XTemplateHaskell
 [1 of 3] Compiling SafeLang12_B     ( SafeLang12_B.hs, SafeLang12_B.o )
 
-SafeLang12_B.hs:14:68:
-    lexical error in string/character literal at character '\''
+SafeLang12_B.hs:14:67:
+    Syntax error on ''Class
+    Perhaps you intended to use -XTemplateHaskell
index 0009de1..46073c4 100644 (file)
@@ -1 +1 @@
-                   ((->) (Sym (Eta.NTCo:Foo)) (Refl Eta.T))) -}
+                  Eta.bof `cast` ((->) (Sym (Eta.NTCo:Foo)) (Refl Eta.T)) -}
index 2bdb17f..f41296a 100644 (file)
 Total ticks:     11
 
 2 PreInlineUnconditionally
-    1 f
-    1 lvl
-1 UnfoldingDone
-    1 Roman.bar
-1 RuleFired
-    1 foo/bar
+  1 f
+  1 lvl
+1 UnfoldingDone 1 Roman.bar
+1 RuleFired 1 foo/bar
 7 BetaReduction
-    1 f
-    1 m
-    1 a
-    1 m
-    1 a
-    1 m
-    1 b
-8 SimplifierDone
-    8
+  1 f
+  1 m
+  1 a
+  1 m
+  1 a
+  1 b
+  1 m
+8 SimplifierDone 8
 
 
index ab82e56..d82014b 100644 (file)
@@ -1,7 +1,7 @@
 
 simpl017.hs:44:12:
     Couldn't match expected type `forall v. [E m i] -> E' v m a'
-                with actual type `[E m i] -> E' v0 m a'
+                with actual type `[E m i] -> E' v0 m0 e0'
     In the first argument of `return', namely `f'
     In a stmt of a 'do' block: return f
     In the first argument of `E', namely
index 00b123d..214b1ef 100644 (file)
@@ -2,7 +2,7 @@ T3319.hs:1:1: Splicing declarations
     return
       [ForeignD
          (ImportF
-            CCall Unsafe "&" (mkName "foo") (AppT (ConT 'Ptr) (ConT '())))]
+            CCall Unsafe "&" (mkName "foo") (AppT (ConT ''Ptr) (ConT ''())))]
   ======>
     T3319.hs:8:3-93
     foreign import ccall unsafe "static &foo" foo :: Ptr GHC.Tuple.()
index d8afd83..9f7067b 100644 (file)
@@ -1,6 +1,6 @@
 T5290.hs:1:1: Splicing declarations
     let n = mkName "T"
-    in return [DataD [] n [] [NormalC n [(Unpacked, ConT 'Int)]] []]
+    in return [DataD [] n [] [NormalC n [(Unpacked, ConT ''Int)]] []]
   ======>
     T5290.hs:(7,4)-(8,67)
     data T = T {-# UNPACK #-} !Int
index 39112c1..6893d0a 100644 (file)
@@ -6,7 +6,7 @@ TH_foreignInterruptible.hs:1:1: Splicing declarations
             Interruptible
             "&"
             (mkName "foo")
-            (AppT (ConT 'Ptr) (ConT '())))]
+            (AppT (ConT ''Ptr) (ConT ''())))]
   ======>
     TH_foreignInterruptible.hs:8:3-100
     foreign import ccall interruptible "static &foo" foo
index 88eeca7..843959f 100644 (file)
@@ -1,5 +1,5 @@
 TH_genEx.hs:1:1: Splicing declarations
-    genAny (reify 'MyInterface)
+    genAny (reify ''MyInterface)
   ======>
     TH_genEx.hs:13:3-30
     data AnyMyInterface1111
index 3f5eafd..0e95728 100644 (file)
@@ -1,6 +1,8 @@
 {-# LANGUAGE ConstraintKinds, FlexibleContexts, FlexibleInstances, KindSignatures #-}
 module TcShouldTerminate where
 
+import GHC.Prim (Constraint)
+
 class C (p :: Constraint)
 class D (p :: Constraint)
 
index 60b7d09..a411c6d 100644 (file)
@@ -167,7 +167,7 @@ test('tc163', only_compiler_types(['ghc']), compile, [''])
 test('tc164', normal, compile, [''])
 test('tc165', normal, compile, [''])
 test('tc166', only_compiler_types(['ghc']), compile, [''])
-test('tc167', only_compiler_types(['ghc']), compile, [''])
+test('tc167', only_compiler_types(['ghc']), compile_fail, [''])
 test('tc168', only_compiler_types(['ghc']), compile_fail, [''])
 test('tc169', normal, compile, [''])
 
index c493967..786c88e 100644 (file)
@@ -2,5 +2,5 @@
 tc056.hs:16:10:
     Warning: Duplicate constraint(s): Eq' a
     In the context: (Eq' a, Eq' a)
-    While checking the context of an instance declaration
+    While checking an instance declaration
     In the instance declaration for `Eq' [a]'
index a9b0440..d77a7b6 100644 (file)
@@ -1,6 +1,8 @@
 {-# LANGUAGE TypeFamilies, ConstraintKinds, UndecidableInstances #-}
 module Ctx where
 
+import GHC.Prim( Constraint )
+
 type family Indirect :: * -> Constraint
 type instance Indirect = Show
 
index dcfbf1a..f06eabf 100644 (file)
@@ -1,6 +1,8 @@
 {-# LANGUAGE TypeFamilies, ConstraintKinds, UndecidableInstances #-}
 module Ctx where
 
+import GHC.Prim( Constraint )
+
 type family Indirect :: * -> Constraint
 type instance Indirect = Show
 
index b1db39f..efab2df 100644 (file)
@@ -1,6 +1,8 @@
 {-# LANGUAGE KindSignatures, ConstraintKinds, MultiParamTypeClasses, FlexibleInstances, UndecidableInstances #-}
 module Ctx where
 
+import GHC.Prim( Constraint )
+
 data Proxy (ctxt :: * -> Constraint) = Proxy
 
 -- At one time, this one worked:
index 00f030d..54a3e63 100644 (file)
@@ -2,6 +2,8 @@
 
 module AltPrelude where
 
+import GHC.Prim (Constraint)
+
 class MyFunctor f where
        type FunctorCtxt f a :: Constraint
        type FunctorCtxt f a = ()
index d71a83b..417e0f8 100644 (file)
@@ -1,6 +1,5 @@
 
 AssocTyDef06.hs:6:5:
-    Kind mis-match
-    Expected kind `k0 -> k1 -> k2', but `Typ' has kind `k0 -> *'
+    Number of parameters must match family declaration; expected 1
     In the type synonym instance default declaration for `Typ'
     In the class declaration for `Cls'
index de91620..f7215b7 100644 (file)
@@ -1,13 +1,12 @@
 
-T2688.hs:8:22:
-    Could not deduce (s ~ v)
+T2688.hs:8:14:
+    Could not deduce (v ~ s)
     from the context (VectorSpace v s)
       bound by the class declaration for `VectorSpace'
       at T2688.hs:(5,1)-(8,23)
-      `s' is a rigid type variable bound by
-          the class declaration for `VectorSpace' at T2688.hs:5:21
       `v' is a rigid type variable bound by
           the class declaration for `VectorSpace' at T2688.hs:5:19
-    In the second argument of `(/)', namely `s'
-    In the second argument of `(*^)', namely `(1 / s)'
+      `s' is a rigid type variable bound by
+          the class declaration for `VectorSpace' at T2688.hs:5:21
     In the expression: v *^ (1 / s)
+    In an equation for `^/': v ^/ s = v *^ (1 / s)
index da472a3..1e3bd0a 100644 (file)
@@ -5,10 +5,10 @@ T2994.hs:11:10:
     but `MonadReader Int' has kind `* -> Constraint'
     In the instance declaration for `MonadReader Int'
 
-T2994.hs:13:10:
-    `MonadReader (Reader' r)' is not applied to enough type arguments
-    Expected kind `Constraint',
-    but `MonadReader (Reader' r)' has kind `* -> Constraint'
+T2994.hs:13:23:
+    `Reader' r' is not applied to enough type arguments
+    The first argument of `MonadReader' should have kind `*',
+    but `Reader' r' has kind `* -> *'
     In the instance declaration for `MonadReader (Reader' r)'
 
 T2994.hs:15:10:
index d29dc2e..348c14c 100644 (file)
@@ -1,7 +1,6 @@
 
-T3540.hs:4:12:
-    Predicate `a ~ Int' used as a type
-    Expected kind `*', but `a ~ Int' has kind `Constraint'
+T3540.hs:4:1:
+    Expecting an ordinary type, but found a type of kind Constraint
     In the type signature for `thing': thing :: a ~ Int
 
 T3540.hs:7:20:
index bdecc12..8eb1ab9 100644 (file)
@@ -1,7 +1,7 @@
 
 T3950.hs:15:13:
-    Couldn't match expected type `Id p' with actual type `Id p x0'
+    Couldn't match expected type `Id p' with actual type `Id p0 x0'
     Expected type: w (Id p)
-      Actual type: Sealed (Id p x0)
+      Actual type: Sealed (Id p0 x0)
     In the first argument of `Just', namely rp'
     In the expression: Just rp'
index 192ef4c..f11c123 100644 (file)
@@ -1,15 +1,16 @@
-\r
-T5573a.hs:11:16:\r
-    Kind incompatibility when matching types:\r
-      t0 :: ??\r
-      (# Bool, Bool #) :: (#)\r
-    In the expression: (# True, False #)\r
-    In the expression: (# x, (# True, False #) #)\r
-    In an equation for `foo2': foo2 x = (# x, (# True, False #) #)\r
-\r
-T5573a.hs:14:6:\r
-    Kind incompatibility when matching types:\r
-      t0 :: ??\r
-      (# t1, t2 #) :: (#)\r
-    In the pattern: (# x, y #)\r
-    In an equation for `foo3': foo3 (# x, y #) = x\r
+
+T5573a.hs:11:16:
+    Couldn't match kind `??' against `(#)'
+    Kind incompatibility when matching types:
+      t0 :: ??
+      (# t1, t2 #) :: (#)
+    In the expression: (# True, False #)
+    In the expression: (# x, (# True, False #) #)
+
+T5573a.hs:14:6:
+    Couldn't match kind `??' against `(#)'
+    Kind incompatibility when matching types:
+      t0 :: ??
+      (# t1, t2 #) :: (#)
+    In the pattern: (# x, y #)
+    In an equation for `foo3': foo3 (# x, y #) = x
index d8435d2..03f0f7b 100644 (file)
@@ -145,7 +145,7 @@ test('tcfail154', normal, compile_fail, [''])
 test('tcfail155', normal, compile_fail, [''])
 test('tcfail156', normal, compile_fail, [''])
 test('tcfail157', normal, compile_fail, [''])
-test('tcfail158', normal, compile_fail, [''])
+test('tcfail158', expect_fail, compile_fail, [''])
 test('tcfail159', normal, compile_fail, [''])
 test('tcfail160', normal, compile_fail, [''])
 test('tcfail161', normal, compile_fail, [''])
index c7bca0a..f77da6f 100644 (file)
@@ -1,9 +1,7 @@
 
 mc19.hs:10:31:
-    Couldn't match type `a' with `[a]'
-      `a' is a rigid type variable bound by
-          a type expected by the context: [a] -> [a] at mc19.hs:10:26
+    Occurs check: cannot construct the infinite type: a0 = [a0]
     Expected type: [a] -> [a]
-      Actual type: [a] -> [[a]]
+      Actual type: [a0] -> [[a0]]
     In the expression: inits
     In a stmt of a monad comprehension: then inits
index 95c077c..c712b4b 100644 (file)
@@ -4,6 +4,6 @@ mc21.hs:12:26:
       `a' is a rigid type variable bound by
           a type expected by the context: [a] -> [[a]] at mc21.hs:12:9
     Expected type: [a] -> [[a]]
-      Actual type: [a] -> [a]
+      Actual type: [[a]] -> [[a]]
     In the return type of a call of `take'
     In the expression: take 5
index 96294ae..943b762 100644 (file)
@@ -4,6 +4,6 @@ mc22.hs:10:26:
       `a' is a rigid type variable bound by
           a type expected by the context: [a] -> [t0 a] at mc22.hs:10:9
     Expected type: [a] -> [t0 a]
-      Actual type: [a] -> [a]
+      Actual type: [t0 a] -> [t0 a]
     In the return type of a call of `take'
     In the expression: take 5
index 7ad9ecb..e6d06db 100644 (file)
@@ -1,7 +1,7 @@
 
 tcfail028.hs:4:17:
     `A a' is not applied to enough type arguments
-    Expected kind `?', but `A a' has kind `k0 -> *'
+    Expected kind `??', but `A a' has kind `k0 -> *'
     In the type `A a'
     In the definition of data constructor `B'
     In the data type declaration for `A'
index 9d94b92..637ebca 100644 (file)
@@ -1,11 +1,12 @@
 
-tcfail065.hs:29:20:
-    Couldn't match type `x1' with `x'
+tcfail065.hs:29:18:
+    Couldn't match type `x' with `x1'
+      `x' is a rigid type variable bound by
+          the instance declaration at tcfail065.hs:28:18
       `x1' is a rigid type variable bound by
            the type signature for setX :: x1 -> X x -> X x
            at tcfail065.hs:29:3
-      `x' is a rigid type variable bound by
-          the instance declaration at tcfail065.hs:28:18
-    In the first argument of `X', namely `x'
+    Expected type: X x1
+      Actual type: X x
+    In the return type of a call of `X'
     In the expression: X x
-    In an equation for `setX': setX x (X _) = X x
index 1a7c840..afc8a3c 100644 (file)
@@ -12,30 +12,30 @@ tcfail068.hs:14:9:
           the type signature for
             itgen :: Constructed a => (Int, Int) -> a -> IndTree s a
           at tcfail068.hs:12:1
-    Expected type: GHC.ST.ST s (IndTree s1 a)
+    Expected type: GHC.ST.ST s1 (IndTree s a)
       Actual type: GHC.ST.ST s (STArray s (Int, Int) a)
     In the return type of a call of `newSTArray'
     In the first argument of `runST', namely
       `(newSTArray ((1, 1), n) x)'
 
-tcfail068.hs:20:22:
-    Could not deduce (s ~ s1)
+tcfail068.hs:20:9:
+    Could not deduce (s1 ~ s)
     from the context (Constructed a)
       bound by the type signature for
                  itiap :: Constructed a =>
                           (Int, Int) -> (a -> a) -> IndTree s a -> IndTree s a
       at tcfail068.hs:(17,1)-(21,19)
+      `s1' is a rigid type variable bound by
+           a type expected by the context: GHC.ST.ST s1 (IndTree s a)
+           at tcfail068.hs:18:9
       `s' is a rigid type variable bound by
           the type signature for
             itiap :: Constructed a =>
                      (Int, Int) -> (a -> a) -> IndTree s a -> IndTree s a
           at tcfail068.hs:17:1
-      `s1' is a rigid type variable bound by
-           a type expected by the context: GHC.ST.ST s1 (IndTree s a)
-           at tcfail068.hs:18:9
-    Expected type: STArray s1 (Int, Int) a
-      Actual type: IndTree s a
-    In the first argument of `writeSTArray', namely `arr'
+    Expected type: GHC.ST.ST s1 ()
+      Actual type: GHC.ST.ST s ()
+    In the return type of a call of `writeSTArray'
     In the first argument of `(>>)', namely
       `writeSTArray arr i (f val)'
 
index 17d9f48..b9e9d2f 100644 (file)
@@ -1,5 +1,7 @@
 
-tcfail087.hs:6:11:
-    Illegal unboxed tuple type as function argument: (# Int, Int #)
+tcfail087.hs:6:14:
+    Kind mis-match
+    Expected kind `??', but `(# Int, Int #)' has kind `(#)'
+    In the type `(# Int, Int #)'
     In the definition of data constructor `Ex'
     In the data type declaration for `Ex'
index c63ced5..f63d96e 100644 (file)
@@ -1,5 +1,6 @@
 
 tcfail090.hs:8:9:
+    Couldn't match kind `*' against `#'
     Kind incompatibility when matching types:
       a0 :: *
       ByteArray# :: #
index 636ab29..a892b23 100644 (file)
@@ -1,11 +1,11 @@
 
-tcfail103.hs:15:23:
-    Couldn't match type `t' with `s'
-      `t' is a rigid type variable bound by
-          the type signature for f :: ST t Int at tcfail103.hs:11:1
+tcfail103.hs:15:13:
+    Couldn't match type `s' with `t'
       `s' is a rigid type variable bound by
           the type signature for g :: ST s Int at tcfail103.hs:15:9
-    Expected type: STRef s Int
-      Actual type: STRef t Int
-    In the first argument of `readSTRef', namely `v'
+      `t' is a rigid type variable bound by
+          the type signature for f :: ST t Int at tcfail103.hs:11:1
+    Expected type: ST s Int
+      Actual type: ST t Int
+    In the return type of a call of `readSTRef'
     In the expression: readSTRef v
index 5d406cd..56c97c2 100644 (file)
@@ -3,5 +3,5 @@ tcfail108.hs:7:10:
     Non type-variable argument in the constraint: Eq (f (Rec f))
     (Use -XFlexibleContexts to permit this)
     In the context: (Eq (f (Rec f)))
-    While checking the context of an instance declaration
+    While checking an instance declaration
     In the instance declaration for `Eq (Rec f)'
index e663999..2bc7918 100644 (file)
@@ -1,6 +1,6 @@
 
-tcfail110.hs:8:30:
+tcfail110.hs:8:19:
     `Foo a' is not applied to enough type arguments
-    Expected kind `*', but `Foo a' has kind `* -> *'
+    Expected kind `??', but `Foo a' has kind `* -> *'
     In the type signature for `bar':
       bar :: String -> (forall a. Foo a) -> IO ()
index fd1a02c..00352af 100644 (file)
@@ -1,11 +1,11 @@
 
 tcfail115.hs:9:24:
+    Couldn't match kind `??' against `(#)'
     Kind incompatibility when matching types:
       t0 :: ??
       (# Int, Int #) :: (#)
     In the expression: (r :: (# Int, Int #))
     In a case alternative: r -> (r :: (# Int, Int #))
-    In the expression: case t of { r -> (r :: (# Int, Int #)) }
 
 tcfail115.hs:12:25:
     The variable `r' cannot have an unboxed tuple type: (# Int, Int #)
index 3f6c035..7002ee0 100644 (file)
@@ -1,26 +1,11 @@
 
 tcfail122.hs:8:9:
-    Kind incompatibility when matching types:
-      d0 :: * -> *
-      b0 :: *
-    Expected type: a0 b0
-      Actual type: c0 d0
-    In the expression:
-        undefined :: forall c :: ((* -> *) -> *) d :: (* -> *). c d
-    In the expression:
-      [undefined :: forall a b. a b,
-       undefined :: forall c :: ((* -> *) -> *) d :: (* -> *). c d]
-
-tcfail122.hs:8:9:
+    Couldn't match kind `* -> *' against `*'
     Kind incompatibility when matching types:
       c0 :: (* -> *) -> *
       a0 :: * -> *
     In the expression:
-        undefined :: forall c :: ((* -> *) -> *) d :: (* -> *). c d
+        undefined :: forall (c :: (* -> *) -> *) (d :: * -> *). c d
     In the expression:
       [undefined :: forall a b. a b,
-       undefined :: forall c :: ((* -> *) -> *) d :: (* -> *). c d]
-    In an equation for `foo':
-        foo
-          = [undefined :: forall a b. a b,
-             undefined :: forall c :: ((* -> *) -> *) d :: (* -> *). c d]
+       undefined :: forall (c :: (* -> *) -> *) (d :: * -> *). c d]
index 560c8d9..b7ec97f 100644 (file)
@@ -1,16 +1,8 @@
 
 tcfail123.hs:11:10:
+    Couldn't match kind `*' against `#'
     Kind incompatibility when matching types:
       t0 :: *
       GHC.Prim.Int# :: #
     In the first argument of `f', namely `3#'
     In the expression: f 3#
-    In the expression: (f 3#, f 4.3#, f True)
-
-tcfail123.hs:11:16:
-    Kind incompatibility when matching types:
-      t1 :: *
-      GHC.Prim.Float# :: #
-    In the first argument of `f', namely `4.3#'
-    In the expression: f 4.3#
-    In the expression: (f 3#, f 4.3#, f True)
index cdeff3c..229cd1f 100644 (file)
@@ -1,7 +1,7 @@
 
 tcfail136.hs:9:35:
     `SymDict' is not applied to enough type arguments
-    Expected kind `?', but `SymDict' has kind `* -> *'
+    Expected kind `??', but `SymDict' has kind `* -> *'
     In the type `SymDict'
     In the definition of data constructor `SymTable'
     In the data type declaration for `SymTable'
index 9e1c99a..e66dc94 100644 (file)
@@ -1,7 +1,7 @@
 
 tcfail146.hs:7:22:
     Predicate `SClass a' used as a type
-    Expected kind `?', but `SClass a' has kind `Constraint'
+    Expected kind `??', but `SClass a' has kind `Constraint'
     In the type `SClass a'
     In the definition of data constructor `SCon'
     In the data type declaration for `SData'
index 360fb09..51c32ad 100644 (file)
@@ -1,7 +1,7 @@
 
 tcfail147.hs:7:19:
     `XClass' is not applied to enough type arguments
-    Expected kind `?', but `XClass' has kind `k0 -> Constraint'
+    Expected kind `??', but `XClass' has kind `k0 -> Constraint'
     In the type `XClass'
     In the definition of data constructor `XCon'
     In the data type declaration for `XData'
index 13d4293..670f440 100644 (file)
@@ -1,7 +1,7 @@
 
 tcfail148.hs:5:28:
     `List' is not applied to enough type arguments
-    Expected kind `?', but `List' has kind `* -> *'
+    Expected kind `??', but `List' has kind `* -> *'
     In the type `List'
     In the definition of data constructor `Cons'
     In the data type declaration for `List'
index 112973b..00578a1 100644 (file)
@@ -1,4 +1,4 @@
-{-# LANGUAGE DatatypeContexts #-}
+{-# LANGUAGE DatatypeContexts, MultiParamTypeClasses #-}
 module ShouldFail where
 
 class (Show a, Eq a, Monad m) => Name m a where 
index b389ef1..0556582 100644 (file)
@@ -1,8 +1,8 @@
 
 tcfail159.hs:9:11:
+    Couldn't match kind `*' against `(#)'
     Kind incompatibility when matching types:
       t0 :: *
       (# Int, Int #) :: (#)
     In the pattern: ~(# p, q #)
     In a case alternative: ~(# p, q #) -> p
-    In the expression: case h x of { ~(# p, q #) -> p }
index ae7b1c5..d4c3903 100644 (file)
@@ -1,7 +1,7 @@
 
 tcfail162.hs:10:16:
     `ForeignPtr' is not applied to enough type arguments
-    Expected kind `?', but `ForeignPtr' has kind `* -> *'
+    Expected kind `??', but `ForeignPtr' has kind `* -> *'
     In the type `{-# UNPACK #-} !ForeignPtr'
     In the definition of data constructor `Foo'
     In the data type declaration for `Foo'
index 84c0868..de8bb60 100644 (file)
@@ -15,9 +15,9 @@ tcfail174.hs:13:14:
     In the expression: Capture g
 
 tcfail174.hs:16:14:
-    Couldn't match expected type `forall x. x -> b'
+    Couldn't match expected type `forall x. x -> a0'
                 with actual type `forall a. a -> a'
-    Expected type: Capture (forall x. x -> b)
+    Expected type: Capture (forall x. x -> a0)
       Actual type: Capture (forall a. a -> a)
     In the first argument of `Capture', namely `g'
     In the expression: Capture g
index ba995b6..d9b4538 100644 (file)
@@ -1,5 +1,5 @@
 
-tcfail179.hs:14:41:
+tcfail179.hs:14:37:
     Couldn't match type `x' with `s'
       `x' is a rigid type variable bound by
           a pattern with constructor
@@ -8,7 +8,7 @@ tcfail179.hs:14:41:
           at tcfail179.hs:14:14
       `s' is a rigid type variable bound by
           the type signature for run :: T s -> Int at tcfail179.hs:13:1
-    Expected type: x -> s
-      Actual type: x -> x
-    In the second argument of `g', namely `id'
+    Expected type: (s, s, Int)
+      Actual type: (x, s, Int)
+    In the return type of a call of `g'
     In the expression: g x id
index 6fd626a..178eebf 100644 (file)
@@ -4,6 +4,6 @@ tcfail191.hs:11:26:
       `a' is a rigid type variable bound by
           a type expected by the context: [a] -> [[a]] at tcfail191.hs:11:9
     Expected type: [a] -> [[a]]
-      Actual type: [a] -> [a]
+      Actual type: [[a]] -> [[a]]
     In the return type of a call of `take'
     In the expression: take 5
index d72c821..400671b 100644 (file)
@@ -13,6 +13,6 @@ tcfail192.hs:10:26:
       `a' is a rigid type variable bound by
           a type expected by the context: [a] -> [[a]] at tcfail192.hs:10:9
     Expected type: [a] -> [[a]]
-      Actual type: [a] -> [a]
+      Actual type: [[a]] -> [[a]]
     In the return type of a call of `take'
     In the expression: take 5
index 6fd99ae..f19720f 100644 (file)
@@ -1,9 +1,7 @@
 
 tcfail193.hs:10:31:
-    Couldn't match type `a' with `[a]'
-      `a' is a rigid type variable bound by
-          a type expected by the context: [a] -> [a] at tcfail193.hs:10:26
+    Occurs check: cannot construct the infinite type: a0 = [a0]
     Expected type: [a] -> [a]
-      Actual type: [a] -> [[a]]
+      Actual type: [a0] -> [[a0]]
     In the expression: inits
     In a stmt of a list comprehension: then inits
index 90f590d..c75dc8f 100644 (file)
@@ -1,8 +1,8 @@
 
 tcfail200.hs:5:15:
+    Couldn't match kind `*' against `#'
     Kind incompatibility when matching types:
       t0 :: *
       GHC.Prim.Int# :: #
     In the expression: 1#
     In the expression: (1#, 'c')
-    In an equation for `x': x = (1#, 'c')
index 653e503..5efb129 100644 (file)
@@ -1,14 +1,13 @@
 
-tcfail201.hs:18:58:
+tcfail201.hs:18:56:
     Couldn't match type `a' with `HsDoc t0'
       `a' is a rigid type variable bound by
           the type signature for
             gfoldl' :: (forall a1 b. c (a1 -> b) -> a1 -> c b)
-                       -> (forall g. g -> c g)
-                       -> a
-                       -> c a
+                       -> (forall g. g -> c g) -> a -> c a
           at tcfail201.hs:16:1
-    Expected type: HsDoc t0 -> a
-      Actual type: HsDoc t0 -> HsDoc t0
-    In the first argument of `z', namely `DocParagraph'
-    In the first argument of `k', namely `z DocParagraph'
+    Expected type: c a
+      Actual type: c (HsDoc t0)
+    In the expression: z DocParagraph `k` hsDoc
+    In a case alternative:
+        (DocParagraph hsDoc) -> z DocParagraph `k` hsDoc
index 46419c4..4cb3172 100644 (file)
@@ -14,11 +14,12 @@ tcfail206.hs:8:5:
     In the expression: (1,)
     In an equation for `b': b = (1,)
 
-tcfail206.hs:11:6:
+tcfail206.hs:11:5:
     Couldn't match type `a' with `Bool'
       `a' is a rigid type variable bound by
           the type signature for c :: a -> (a, Bool) at tcfail206.hs:11:1
-    In the expression: True || False
+    Expected type: a -> (a, Bool)
+      Actual type: Bool -> (Bool, Bool)
     In the expression: (True || False,)
     In an equation for `c': c = (True || False,)
 
index d5b106a..95aba8e 100644 (file)
@@ -1,5 +1,3 @@
 
 tcfail210.hs:4:31:
-    Unexpected named kind:
-        Constraint
-    Perhaps you meant to use -XConstraintKinds?
+    Not in scope: type constructor or class `Constraint'
index 9451533..c93c4ad 100644 (file)
@@ -1,6 +1,8 @@
 {-# LANGUAGE TypeFamilies, ConstraintKinds #-}
 module ShouldFail where
 
+import GHC.Prim( Constraint )
+
 type family F a :: Constraint
 
 class (F a) => C a where
index e67034f..a999e21 100644 (file)
@@ -1,5 +1,5 @@
 
-tcfail213.hs:6:1:
+tcfail213.hs:8:1:
     Illegal irreducible constraint F a
     in superclass/instance head context (Use -XUndecidableInstances to permit this)
     In the context: (F a)
index 553dfcf..81162e6 100644 (file)
@@ -1,6 +1,8 @@
 {-# LANGUAGE TypeFamilies, ConstraintKinds #-}
 module ShouldFail where
 
+import GHC.Prim( Constraint )
+
 type family F a :: Constraint
 
 class C a where
index 2832df9..c924e50 100644 (file)
@@ -1,7 +1,7 @@
 
-tcfail214.hs:7:10:
+tcfail214.hs:9:10:
     Illegal irreducible constraint F a
     in superclass/instance head context (Use -XUndecidableInstances to permit this)
     In the context: (F a)
-    While checking the context of an instance declaration
+    While checking an instance declaration
     In the instance declaration for `C [a]'