Improvements to kind error messages, mainly
authorSimon Peyton Jones <simonpj@microsoft.com>
Fri, 19 Oct 2012 01:20:12 +0000 (02:20 +0100)
committerSimon Peyton Jones <simonpj@microsoft.com>
Fri, 19 Oct 2012 01:20:12 +0000 (02:20 +0100)
Also some expected/actual messages are now the right way round

39 files changed:
testsuite/tests/gadt/gadt10.stderr
testsuite/tests/ghci/scripts/ghci050.stderr
testsuite/tests/indexed-types/should_fail/GADTwrong1.stderr
testsuite/tests/indexed-types/should_fail/SimpleFail14.stderr
testsuite/tests/indexed-types/should_fail/SimpleFail16.stderr
testsuite/tests/indexed-types/should_fail/T2239.stderr
testsuite/tests/indexed-types/should_fail/T2627b.stderr
testsuite/tests/indexed-types/should_fail/T2664.stderr
testsuite/tests/indexed-types/should_fail/T2693.stderr
testsuite/tests/indexed-types/should_fail/T5439.stderr
testsuite/tests/indexed-types/should_fail/T6123.stderr
testsuite/tests/polykinds/PolyKinds02.stderr
testsuite/tests/polykinds/PolyKinds04.stderr
testsuite/tests/rename/should_fail/rnfail026.stderr
testsuite/tests/typecheck/should_compile/tc211.stderr
testsuite/tests/typecheck/should_fail/AssocTyDef04.stderr
testsuite/tests/typecheck/should_fail/T1633.stderr
testsuite/tests/typecheck/should_fail/T2994.stderr
testsuite/tests/typecheck/should_fail/T3540.stderr
testsuite/tests/typecheck/should_fail/tcfail028.stderr
testsuite/tests/typecheck/should_fail/tcfail036.stderr
testsuite/tests/typecheck/should_fail/tcfail057.stderr
testsuite/tests/typecheck/should_fail/tcfail058.stderr
testsuite/tests/typecheck/should_fail/tcfail063.stderr
testsuite/tests/typecheck/should_fail/tcfail110.stderr
testsuite/tests/typecheck/should_fail/tcfail113.stderr
testsuite/tests/typecheck/should_fail/tcfail132.stderr
testsuite/tests/typecheck/should_fail/tcfail134.stderr
testsuite/tests/typecheck/should_fail/tcfail135.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.stderr
testsuite/tests/typecheck/should_fail/tcfail158.stderr
testsuite/tests/typecheck/should_fail/tcfail160.stderr
testsuite/tests/typecheck/should_fail/tcfail161.stderr
testsuite/tests/typecheck/should_fail/tcfail162.stderr
testsuite/tests/typecheck/should_fail/tcfail212.stderr

index 00cb063..e244eca 100644 (file)
@@ -1,6 +1,7 @@
 \r
 gadt10.hs:6:24:\r
     Expecting one more argument to `RInt'\r
+    Expected kind `*', but `RInt' has kind `k0 -> *'\r
     In the type `RInt'\r
     In the definition of data constructor `R'\r
     In the data declaration for `RInt'\r
index f31b5c4..b2e11a2 100644 (file)
@@ -1,7 +1,7 @@
 
 <interactive>:6:49:
-    Couldn't match expected type `a'
-                with actual type `ListableElem (a, a)'
+    Couldn't match expected type `ListableElem (a, a)'
+                with actual type `a'
       `a' is a rigid type variable bound by
           the instance declaration at <interactive>:6:10
     Relevant bindings include
index 9c5465f..33fde55 100644 (file)
@@ -1,7 +1,7 @@
 
 GADTwrong1.hs:12:19:
     Could not deduce (a1 ~ b)
-    from the context (() ~ Const a1)
+    from the context (Const b ~ Const a1)
       bound by a pattern with constructor
                  T :: forall a. a -> T (Const a),
                in a case alternative
index 8a86c21..14f078d 100644 (file)
@@ -1,6 +1,6 @@
 \r
 SimpleFail14.hs:5:15:\r
-    Predicate `a ~ a' used as a type\r
+    Expected a type, but `a ~ a' has kind `Constraint'\r
     In the type `a ~ a'\r
     In the definition of data constructor `T'\r
     In the data declaration for `T'\r
index 1410fca..4ccdbc3 100644 (file)
@@ -1,6 +1,6 @@
 
 SimpleFail16.hs:10:12:
-    Couldn't match expected type `F ()' with actual type `p0 a0'
+    Couldn't match expected type `p0 a0' with actual type `F ()'
     The type variables `p0', `a0' are ambiguous
     Possible cause: the monomorphism restriction applied to: `bar'
     Probable fix: give these definition(s) an explicit type signature
index d360bfd..42fdb71 100644 (file)
@@ -2,7 +2,7 @@
 T2239.hs:47:13:
     Couldn't match type `forall b1. MyEq b1 Bool => b1 -> b1'
                   with `b -> b'
-    Expected type: (forall b. MyEq b Bool => b -> b) -> b -> b
+    Expected type: (forall b1. MyEq b1 Bool => b1 -> b1) -> b -> b
       Actual type: (forall b. MyEq b Bool => b -> b)
                    -> forall b. MyEq b Bool => b -> b
     In the expression:
@@ -18,7 +18,7 @@ T2239.hs:47:13:
 T2239.hs:50:13:
     Couldn't match type `forall b1. b1 ~ Bool => b1 -> b1'
                   with `Bool -> Bool'
-    Expected type: (forall b. b ~ Bool => b -> b) -> b -> b
+    Expected type: (forall b1. b1 ~ Bool => b1 -> b1) -> b -> b
       Actual type: (forall b. b ~ Bool => b -> b)
                    -> forall b. b ~ Bool => b -> b
     In the expression:
index e18a8d2..acf77ab 100644 (file)
@@ -1,12 +1,9 @@
 
 T2627b.hs:20:24:
-    Couldn't match expected type `Dual (Dual a0)' with actual type `a0'
-      `a0' is untouchable
-        inside the constraints (b ~ W a2 b2)
-        bound by a pattern with constructor
-                   Wr :: forall a b. a -> Comm b -> Comm (W a b),
-                 in an equation for `conn'
-        at T2627b.hs:20:14-19
+    Occurs check: cannot construct the infinite type:
+      a0 ~ Dual (Dual a0)
+    The type variable `a0' is ambiguous
+    Possible fix: add a type signature that fixes these type variable(s)
     In the expression: conn undefined undefined
     In an equation for `conn':
         conn (Rd k) (Wr a r) = conn undefined undefined
index 07b12e4..90a7dfa 100644 (file)
@@ -12,8 +12,8 @@ T2664.hs:31:52:
           the instance declaration at T2664.hs:22:10
       `a' is a rigid type variable bound by
           the instance declaration at T2664.hs:22:10
-    Expected type: Dual (Dual a)
-      Actual type: b
+    Expected type: IO (PChan b, PChan (Dual a))
+      Actual type: IO (PChan (Dual (Dual a)), PChan (Dual a))
     Relevant bindings include
       newPChan :: IO (PChan (a :*: b), PChan c) (bound at T2664.hs:23:5)
       v :: MVar (Either (PChan a) (PChan b)) (bound at T2664.hs:24:9)
index b873cf2..3b340bd 100644 (file)
@@ -33,15 +33,13 @@ T2693.hs:18:23:
     In the second argument of `(+)', namely `snd x'
     In the expression: fst x + snd x
 
-T2693.hs:28:20:
+T2693.hs:29:26:
     Couldn't match type `TFn a0' with `PVR a1'
     The type variables `a0', `a1' are ambiguous
     Possible fix: add a type signature that fixes these type variable(s)
-    Expected type: () -> Maybe (PVR a1)
-      Actual type: () -> Maybe (TFn a0)
-    In the first argument of `mapM', namely `g'
-    In a stmt of a 'do' block: pvs <- mapM g undefined
-    In the expression:
-      do { pvs <- mapM g undefined;
-           let n = (map pvrX pvs) `min` (map pvrX pvs);
-           undefined }
+    Expected type: [PVR a1]
+      Actual type: [TFn a0]
+    Relevant bindings include pvs :: [TFn a0] (bound at T2693.hs:28:8)
+    In the second argument of `map', namely `pvs'
+    In the first argument of `min', namely `(map pvrX pvs)'
+    In the expression: (map pvrX pvs) `min` (map pvrX pvs)
index 81453a0..87caf8c 100644 (file)
@@ -1,9 +1,7 @@
 
-T5439.hs:83:28:
-    Couldn't match type `Attempt t0 -> Attempt (HElemOf l0)'
-                  with `Attempt (HElemOf rs)'
-    Expected type: f (Attempt (HNth n0 l0) -> Attempt (HElemOf l0))
-      Actual type: f (Attempt (WaitOpResult (WaitOps rs)))
+T5439.hs:83:33:
+    Couldn't match expected type `Attempt (WaitOpResult (WaitOps rs))'
+                with actual type `Attempt (HNth n0 l0) -> Attempt (HElemOf l0)'
     Relevant bindings include
       registerWaitOp :: WaitOps rs
                         -> f (Attempt (WaitOpResult (WaitOps rs))) -> IO Bool
@@ -13,10 +11,13 @@ T5439.hs:83:28:
         (bound at T5439.hs:62:22)
       register :: Bool -> Peano n -> WaitOps (HDrop n rs) -> IO Bool
         (bound at T5439.hs:65:9)
-    In the first argument of `complete', namely `ev'
-    In the expression: complete ev
+    In the second argument of `($)', namely
+      `inj $ Failure (e :: SomeException)'
     In a stmt of a 'do' block:
       c <- complete ev $ inj $ Failure (e :: SomeException)
+    In the expression:
+      do { c <- complete ev $ inj $ Failure (e :: SomeException);
+           return $ c || not first }
 
 T5439.hs:83:39:
     Couldn't match expected type `Peano n0'
index 0a82222..4f7f691 100644 (file)
@@ -1,6 +1,6 @@
 
 T6123.hs:10:14:
-    Couldn't match expected type `a0' with actual type `Id a0'
+    Occurs check: cannot construct the infinite type: a0 ~ Id a0
     The type variable `a0' is ambiguous
     Possible cause: the monomorphism restriction applied to:
       `cundefined'
index 3c61552..60e00d5 100644 (file)
@@ -1,6 +1,5 @@
 
 PolyKinds02.hs:13:16:
-    Kind mis-match
     The second argument of `Vec' should have kind `Nat',
-    but `Nat' has kind `*'
+      but `Nat' has kind `*'
     In the type signature for `vec': vec :: Vec Nat Nat
index 484b099..2796b1a 100644 (file)
@@ -1,6 +1,8 @@
-\r
-PolyKinds04.hs:5:16:\r
-    Expecting one more argument to `Maybe'\r
-    In the type `A Maybe'\r
-    In the definition of data constructor `B1'\r
-    In the data declaration for `B'\r
+
+PolyKinds04.hs:5:16:
+    Expecting one more argument to `Maybe'
+    The first argument of `A' should have kind `*',
+      but `Maybe' has kind `* -> *'
+    In the type `A Maybe'
+    In the definition of data constructor `B1'
+    In the data declaration for `B'
index 775899b..3a4ae49 100644 (file)
@@ -1,8 +1,7 @@
 
 rnfail026.hs:16:35:
-    Kind mis-match
     The first argument of `Monad' should have kind `* -> *',
-    but `Set a' has kind `*'
+      but `Set a' has kind `*'
     In the instance declaration for `Monad (forall a. Eq a => Set a)'
 
 rnfail026.hs:19:10:
index 3fc5e25..998cd76 100644 (file)
@@ -1,6 +1,6 @@
 
 tc211.hs:15:22:
-    Couldn't match type `forall a1. a1 -> a1' with `a -> a'
+    Couldn't match type `forall a6. a6 -> a6' with `a -> a'
     Expected type: [a -> a]
       Actual type: [forall a. a -> a]
     In the first argument of `head', namely `foo'
@@ -14,9 +14,9 @@ tc211.hs:15:22:
         (head foo) foo
 
 tc211.hs:70:9:
-    Couldn't match type `forall a2. a2 -> a2' with `a1 -> a1'
+    Couldn't match type `forall a7. a7 -> a7' with `a6 -> a6'
     Expected type: List (forall a. a -> a)
-                   -> (forall a. a -> a) -> a1 -> a1
+                   -> (forall a. a -> a) -> a6 -> a6
       Actual type: List (forall a. a -> a)
                    -> (forall a. a -> a) -> forall a. a -> a
     In the expression:
index b7bc7c2..e02758b 100644 (file)
@@ -1,6 +1,7 @@
 \r
 AssocTyDef04.hs:6:18:\r
     Expecting one more argument to `Maybe'\r
+    Expected kind `*', but `Maybe' has kind `* -> *'\r
     In the type `Maybe'\r
     In the type instance declaration for `Typ'\r
     In the class declaration for `Cls'\r
index 8b3e8fd..bdfa10a 100644 (file)
@@ -1,6 +1,5 @@
 
 T1633.hs:6:18:
-    Kind mis-match
     The first argument of `Functor' should have kind `* -> *',
-    but `Bool' has kind `*'
+      but `Bool' has kind `*'
     In the instance declaration for `Functor Bool'
index feceed7..7c797af 100644 (file)
@@ -1,10 +1,14 @@
 
 T2994.hs:11:10:
     Expecting one more argument to `MonadReader Int'
+    Expected a constraint,
+      but `MonadReader Int' has kind `* -> Constraint'
     In the instance declaration for `MonadReader Int'
 
 T2994.hs:13:23:
     Expecting one more argument to `Reader' r'
+    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 6b85638..83bcbf1 100644 (file)
@@ -1,20 +1,20 @@
 
 T3540.hs:4:12:
-    Predicate `a ~ Int' used as a type
+    Expected a type, but `a ~ Int' has kind `Constraint'
     In the type signature for `thing': thing :: a ~ Int
 
 T3540.hs:7:20:
-    Predicate `a ~ Int' used as a type
+    Expected a type, but `a ~ Int' has kind `Constraint'
     In the type signature for `thing1': thing1 :: Int -> (a ~ Int)
 
 T3540.hs:10:13:
-    Predicate `a ~ Int' used as a type
+    Expected a type, but `a ~ Int' has kind `Constraint'
     In the type signature for `thing2': thing2 :: (a ~ Int) -> Int
 
 T3540.hs:13:12:
-    Predicate `?dude :: Int' used as a type
+    Expected a type, but `?dude :: Int' has kind `Constraint'
     In the type signature for `thing3': thing3 :: (?dude :: Int) -> Int
 
 T3540.hs:16:11:
-    Predicate `Eq a' used as a type
+    Expected a type, but `Eq a' has kind `Constraint'
     In the type signature for `thing4': thing4 :: (Eq a) -> Int
index 6b573bf..53e3f76 100644 (file)
@@ -1,6 +1,7 @@
-\r
-tcfail028.hs:4:17:\r
-    Expecting one more argument to `A a'\r
-    In the type `A a'\r
-    In the definition of data constructor `B'\r
-    In the data declaration for `A'\r
+
+tcfail028.hs:4:17:
+    Expecting one more argument to `A a'
+    Expected a type, but `A a' has kind `k0 -> *'
+    In the type `A a'
+    In the definition of data constructor `B'
+    In the data declaration for `A'
index 7cce75c..98d1722 100644 (file)
@@ -6,4 +6,6 @@ tcfail036.hs:6:10:
 
 tcfail036.hs:9:13:
     Expecting one more argument to `Num'
+    The first argument of `Eq' should have kind `*',
+      but `Num' has kind `* -> Constraint'
     In the instance declaration for `Eq Num'
index da5a480..9399e91 100644 (file)
@@ -1,4 +1,4 @@
 
 tcfail057.hs:5:7:
-    Predicate `RealFrac a' used as a type
+    Expected a type, but `RealFrac a' has kind `Constraint'
     In the type signature for `f': f :: (RealFrac a) -> a -> a
index 6214d27..880bef6 100644 (file)
@@ -1,4 +1,5 @@
 
 tcfail058.hs:6:7:
     Expecting one more argument to `Array a'
+    Expected a constraint, but `Array a' has kind `* -> *'
     In the type signature for `f': f :: Array a => a -> b
index 62e3f17..35d4f40 100644 (file)
@@ -1,4 +1,5 @@
 
 tcfail063.hs:6:9:
     Expecting one more argument to `Num'
+    Expected a constraint, but `Num' has kind `* -> Constraint'
     In the type signature for `moby': moby :: Num => Int -> a -> Int
index 735ef3c..91ba521 100644 (file)
@@ -1,5 +1,6 @@
 
 tcfail110.hs:8:30:
     Expecting one more argument to `Foo a'
+    Expected a type, but `Foo a' has kind `* -> *'
     In the type signature for `bar':
       bar :: String -> (forall a. Foo a) -> IO ()
index 68e63c4..2584b46 100644 (file)
@@ -1,12 +1,12 @@
 
 tcfail113.hs:12:7:
     Expecting one more argument to `Maybe'
+    Expected kind `*', but `Maybe' has kind `* -> *'
     In the type signature for `f': f :: [Maybe]
 
 tcfail113.hs:15:8:
-    Kind mis-match
     The first argument of `T' should have kind `* -> *',
-    but `Int' has kind `*'
+      but `Int' has kind `*'
     In the type signature for `g': g :: T Int
 
 tcfail113.hs:18:6:
index bfe7fc3..91228b8 100644 (file)
@@ -1,7 +1,6 @@
-\r
-tcfail132.hs:17:37:\r
-    Kind mis-match\r
-    The first argument of `T' should have kind `* -> * -> * -> *',\r
-    but `Object f' f t' has kind `* -> * -> *'\r
-    In the type `T (Object f' f t) (DUnit t)'\r
-    In the type declaration for `LiftObject'\r
+
+tcfail132.hs:17:37:
+    The first argument of `T' should have kind `* -> * -> * -> *',
+      but `Object f' f t' has kind `* -> * -> *'
+    In the type `T (Object f' f t) (DUnit t)'
+    In the type declaration for `LiftObject'
index 9634300..721a2f3 100644 (file)
@@ -1,5 +1,6 @@
 
 tcfail134.hs:5:33:
     Expecting one more argument to `XML'
+    Expected a type, but `XML' has kind `* -> Constraint'
     In the type `a -> XML'
     In the class declaration for `XML'
index 4db4808..6e6379f 100644 (file)
@@ -1,5 +1,6 @@
 
 tcfail135.hs:6:23:
     Expecting one more argument to `f'
+    Expected a type, but `f' has kind `k0 -> *'
     In the type `f a -> f'
     In the class declaration for `Foo'
index c1071a1..745aac2 100644 (file)
@@ -1,6 +1,7 @@
-\r
-tcfail136.hs:9:35:\r
-    Expecting one more argument to `SymDict'\r
-    In the type `SymDict'\r
-    In the definition of data constructor `SymTable'\r
-    In the data declaration for `SymTable'\r
+
+tcfail136.hs:9:35:
+    Expecting one more argument to `SymDict'
+    Expected a type, but `SymDict' has kind `* -> *'
+    In the type `SymDict'
+    In the definition of data constructor `SymTable'
+    In the data declaration for `SymTable'
index 433327a..5b835c1 100644 (file)
@@ -1,6 +1,6 @@
-\r
-tcfail146.hs:7:22:\r
-    Predicate `SClass a' used as a type\r
-    In the type `SClass a'\r
-    In the definition of data constructor `SCon'\r
-    In the data declaration for `SData'\r
+
+tcfail146.hs:7:22:
+    Expected a type, but `SClass a' has kind `Constraint'
+    In the type `SClass a'
+    In the definition of data constructor `SCon'
+    In the data declaration for `SData'
index f5aa074..cda7223 100644 (file)
@@ -1,6 +1,7 @@
-\r
-tcfail147.hs:7:19:\r
-    Expecting one more argument to `XClass'\r
-    In the type `XClass'\r
-    In the definition of data constructor `XCon'\r
-    In the data declaration for `XData'\r
+
+tcfail147.hs:7:19:
+    Expecting one more argument to `XClass'
+    Expected a type, but `XClass' has kind `k0 -> Constraint'
+    In the type `XClass'
+    In the definition of data constructor `XCon'
+    In the data declaration for `XData'
index 252ffec..22073f5 100644 (file)
@@ -1,6 +1,7 @@
 \r
 tcfail148.hs:5:28:\r
     Expecting one more argument to `List'\r
+    Expected a type, but `List' has kind `* -> *'\r
     In the type `List'\r
     In the definition of data constructor `Cons'\r
     In the data declaration for `List'\r
index c7dce32..f1884f3 100644 (file)
@@ -4,4 +4,5 @@ tcfail151.hs:1:14: Warning:
 \r
 tcfail151.hs:8:6:\r
     Expecting one more argument to `Name a'\r
+    Expected a constraint, but `Name a' has kind `* -> Constraint'\r
     In the data declaration for `Exp'\r
index a9e9eeb..4638571 100644 (file)
@@ -1,4 +1,5 @@
 
 tcfail158.hs:14:19:
     Expecting one more argument to `Val v'
+    Expected a type, but `Val v' has kind `* -> *'
     In the type signature for `bar': bar :: forall v. Val v
index 33cbbbb..1be65a6 100644 (file)
@@ -1,7 +1,5 @@
 
 tcfail160.hs:7:8:
-    Kind mis-match
     The first argument of `T' should have kind `* -> *',
-    but `Int' has kind `*'
-    In the type signature for `g':
-      g :: T Int
+      but `Int' has kind `*'
+    In the type signature for `g': g :: T Int
index 09f6b52..21d8c1b 100644 (file)
@@ -1,4 +1,5 @@
 
 tcfail161.hs:5:7:
     Expecting one more argument to `Maybe'
+    Expected kind `*', but `Maybe' has kind `* -> *'
     In the type signature for `f': f :: [Maybe]
index de2b312..2563233 100644 (file)
@@ -1,6 +1,7 @@
 \r
 tcfail162.hs:10:33:\r
     Expecting one more argument to `ForeignPtr'\r
+    Expected a type, but `ForeignPtr' has kind `* -> *'\r
     In the type `ForeignPtr'\r
     In the definition of data constructor `Foo'\r
     In the data declaration for `Foo'\r
index 66f0bb2..a944961 100644 (file)
@@ -1,6 +1,8 @@
 
 tcfail212.hs:10:7:
     Expecting one more argument to `Maybe'
+    The first argument of a tuple should have kind `*',
+      but `Maybe' has kind `* -> *'
     In the type signature for `f': f :: (Maybe, Either Int)
 
 tcfail212.hs:13:7: