Merge branch 'master' of http://darcs.haskell.org//testsuite
authorSimon Peyton Jones <simonpj@microsoft.com>
Wed, 3 Oct 2012 07:49:18 +0000 (08:49 +0100)
committerSimon Peyton Jones <simonpj@microsoft.com>
Wed, 3 Oct 2012 07:49:18 +0000 (08:49 +0100)
Conflicts:
tests/polykinds/all.T

198 files changed:
testsuite/config/ghc
testsuite/driver/testglobals.py
testsuite/driver/testlib.py
testsuite/tests/annotations/should_fail/annfail05.stderr
testsuite/tests/annotations/should_fail/annfail08.stderr
testsuite/tests/arrows/should_fail/T5380.stderr
testsuite/tests/arrows/should_fail/arrowfail001.stderr
testsuite/tests/codeGen/should_compile/T7237.hs [new file with mode: 0644]
testsuite/tests/codeGen/should_compile/all.T
testsuite/tests/concurrent/should_run/367.hs [new file with mode: 0644]
testsuite/tests/concurrent/should_run/367.stdout [new file with mode: 0644]
testsuite/tests/concurrent/should_run/367_letnoescape.hs [new file with mode: 0644]
testsuite/tests/concurrent/should_run/367_letnoescape.stdout [new file with mode: 0644]
testsuite/tests/concurrent/should_run/all.T
testsuite/tests/deSugar/should_compile/Makefile
testsuite/tests/deSugar/should_compile/T5252Take2.hs [new file with mode: 0644]
testsuite/tests/deSugar/should_compile/T5252Take2a.hs [new file with mode: 0644]
testsuite/tests/deSugar/should_compile/all.T
testsuite/tests/deriving/should_fail/T2851.stderr
testsuite/tests/deriving/should_fail/T3621.stderr
testsuite/tests/deriving/should_fail/T5287.hs
testsuite/tests/deriving/should_fail/T5287.stderr
testsuite/tests/deriving/should_fail/drvfail-foldable-traversable1.stderr
testsuite/tests/deriving/should_fail/drvfail-functor2.stderr
testsuite/tests/deriving/should_fail/drvfail001.stderr
testsuite/tests/deriving/should_fail/drvfail002.stderr
testsuite/tests/deriving/should_fail/drvfail003.stderr
testsuite/tests/deriving/should_fail/drvfail004.stderr
testsuite/tests/deriving/should_fail/drvfail007.stderr
testsuite/tests/deriving/should_fail/drvfail012.stderr
testsuite/tests/deriving/should_fail/drvfail013.stderr
testsuite/tests/driver/T4437.hs
testsuite/tests/driver/T5147/T5147.stderr
testsuite/tests/ext-core/Makefile [new file with mode: 0644]
testsuite/tests/ext-core/T7239.hs [new file with mode: 0644]
testsuite/tests/ext-core/all.T [new file with mode: 0644]
testsuite/tests/gadt/T3169.stderr
testsuite/tests/gadt/T7205.hs [new file with mode: 0644]
testsuite/tests/gadt/all.T
testsuite/tests/gadt/rw.stderr
testsuite/tests/generics/GenCannotDoRep0.stderr
testsuite/tests/ghci.debugger/scripts/break003.stderr
testsuite/tests/ghci.debugger/scripts/break006.stderr
testsuite/tests/ghci.debugger/scripts/print019.stderr
testsuite/tests/ghci/scripts/Defer02.stderr
testsuite/tests/ghci/scripts/T6106_preproc.sh
testsuite/tests/ghci/scripts/ghci050.stderr
testsuite/tests/indexed-types/should_compile/Simple14.stderr
testsuite/tests/indexed-types/should_compile/T3208b.hs
testsuite/tests/indexed-types/should_compile/T3208b.stderr
testsuite/tests/indexed-types/should_compile/T5591a.hs [new file with mode: 0644]
testsuite/tests/indexed-types/should_compile/T5591b.hs [new file with mode: 0644]
testsuite/tests/indexed-types/should_compile/all.T
testsuite/tests/indexed-types/should_fail/ExtraTcsUntch.hs
testsuite/tests/indexed-types/should_fail/ExtraTcsUntch.stderr
testsuite/tests/indexed-types/should_fail/GADTwrong1.stderr
testsuite/tests/indexed-types/should_fail/NoMatchErr.stderr
testsuite/tests/indexed-types/should_fail/SimpleFail16.stderr
testsuite/tests/indexed-types/should_fail/SimpleFail5a.stderr
testsuite/tests/indexed-types/should_fail/T1897b.stderr
testsuite/tests/indexed-types/should_fail/T1900.stderr
testsuite/tests/indexed-types/should_fail/T2239.stderr
testsuite/tests/indexed-types/should_fail/T2544.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/T3330a.stderr
testsuite/tests/indexed-types/should_fail/T3330c.stderr
testsuite/tests/indexed-types/should_fail/T3440.stderr
testsuite/tests/indexed-types/should_fail/T4093a.stderr
testsuite/tests/indexed-types/should_fail/T4093b.stderr
testsuite/tests/indexed-types/should_fail/T4099.stderr
testsuite/tests/indexed-types/should_fail/T4179.stderr
testsuite/tests/indexed-types/should_fail/T4272.stderr
testsuite/tests/indexed-types/should_fail/T5439.stderr
testsuite/tests/indexed-types/should_fail/T5934.stderr
testsuite/tests/indexed-types/should_fail/T6123.stderr
testsuite/tests/indexed-types/should_fail/T7010.hs
testsuite/tests/indexed-types/should_fail/T7010.stderr
testsuite/tests/mdo/should_fail/mdofail001.stderr
testsuite/tests/module/mod46.stderr
testsuite/tests/module/mod54.stderr
testsuite/tests/parser/should_fail/readFail003.stderr
testsuite/tests/perf/compiler/all.T
testsuite/tests/perf/haddock/all.T
testsuite/tests/perf/should_run/T7257.hs [new file with mode: 0644]
testsuite/tests/perf/should_run/T7257.stdout [new file with mode: 0644]
testsuite/tests/perf/should_run/all.T
testsuite/tests/polykinds/T6054.stderr
testsuite/tests/polykinds/T7224.hs [new file with mode: 0644]
testsuite/tests/polykinds/T7224.stderr [new file with mode: 0644]
testsuite/tests/polykinds/T7230.hs [new file with mode: 0644]
testsuite/tests/polykinds/T7230.stderr [new file with mode: 0644]
testsuite/tests/polykinds/T7238.hs [new file with mode: 0644]
testsuite/tests/polykinds/T7278.hs [new file with mode: 0644]
testsuite/tests/polykinds/T7278.stderr [new file with mode: 0644]
testsuite/tests/polykinds/all.T
testsuite/tests/rebindable/rebindable6.stderr
testsuite/tests/rename/should_compile/rn050.stderr
testsuite/tests/rename/should_compile/rn066.stderr
testsuite/tests/rts/T7227.hs [new file with mode: 0644]
testsuite/tests/rts/all.T
testsuite/tests/safeHaskell/ghci/p15.stderr
testsuite/tests/simplCore/should_compile/rule2.stderr
testsuite/tests/simplCore/should_compile/simpl017.stderr
testsuite/tests/simplCore/should_run/simplrun010.hs
testsuite/tests/th/T5358.hs
testsuite/tests/th/T5358.stderr
testsuite/tests/typecheck/should_compile/FD1.stderr
testsuite/tests/typecheck/should_compile/FD2.stderr
testsuite/tests/typecheck/should_compile/FD3.stderr
testsuite/tests/typecheck/should_compile/T2494.stderr
testsuite/tests/typecheck/should_compile/tc141.stderr
testsuite/tests/typecheck/should_compile/tc168.stderr
testsuite/tests/typecheck/should_compile/tc211.stderr
testsuite/tests/typecheck/should_fail/FDsFromGivens.stderr
testsuite/tests/typecheck/should_fail/FrozenErrorTests.hs
testsuite/tests/typecheck/should_fail/FrozenErrorTests.stderr
testsuite/tests/typecheck/should_fail/IPFail.stderr
testsuite/tests/typecheck/should_fail/LongWayOverlapping.stderr
testsuite/tests/typecheck/should_fail/SCLoop.stderr
testsuite/tests/typecheck/should_fail/T1899.stderr
testsuite/tests/typecheck/should_fail/T2414.stderr
testsuite/tests/typecheck/should_fail/T2534.stderr
testsuite/tests/typecheck/should_fail/T2688.stderr
testsuite/tests/typecheck/should_fail/T2714.stderr
testsuite/tests/typecheck/should_fail/T2846b.stderr
testsuite/tests/typecheck/should_fail/T3592.stderr
testsuite/tests/typecheck/should_fail/T3950.stderr
testsuite/tests/typecheck/should_fail/T5300.stderr
testsuite/tests/typecheck/should_fail/T5570.stderr
testsuite/tests/typecheck/should_fail/T5684.stderr
testsuite/tests/typecheck/should_fail/T5689.stderr
testsuite/tests/typecheck/should_fail/T5853.stderr
testsuite/tests/typecheck/should_fail/T5858.stderr
testsuite/tests/typecheck/should_fail/mc20.stderr
testsuite/tests/typecheck/should_fail/mc22.stderr
testsuite/tests/typecheck/should_fail/mc23.stderr
testsuite/tests/typecheck/should_fail/mc24.stderr
testsuite/tests/typecheck/should_fail/mc25.stderr
testsuite/tests/typecheck/should_fail/tcfail001.stderr
testsuite/tests/typecheck/should_fail/tcfail002.stderr
testsuite/tests/typecheck/should_fail/tcfail003.stderr
testsuite/tests/typecheck/should_fail/tcfail004.stderr
testsuite/tests/typecheck/should_fail/tcfail005.stderr
testsuite/tests/typecheck/should_fail/tcfail006.stderr
testsuite/tests/typecheck/should_fail/tcfail007.stderr
testsuite/tests/typecheck/should_fail/tcfail008.stderr
testsuite/tests/typecheck/should_fail/tcfail010.stderr
testsuite/tests/typecheck/should_fail/tcfail013.stderr
testsuite/tests/typecheck/should_fail/tcfail014.stderr
testsuite/tests/typecheck/should_fail/tcfail015.stderr
testsuite/tests/typecheck/should_fail/tcfail016.stderr
testsuite/tests/typecheck/should_fail/tcfail017.stderr
testsuite/tests/typecheck/should_fail/tcfail018.stderr
testsuite/tests/typecheck/should_fail/tcfail019.stderr
testsuite/tests/typecheck/should_fail/tcfail020.stderr
testsuite/tests/typecheck/should_fail/tcfail029.stderr
testsuite/tests/typecheck/should_fail/tcfail032.stderr
testsuite/tests/typecheck/should_fail/tcfail033.stderr
testsuite/tests/typecheck/should_fail/tcfail043.stderr
testsuite/tests/typecheck/should_fail/tcfail046.stderr
testsuite/tests/typecheck/should_fail/tcfail065.stderr
testsuite/tests/typecheck/should_fail/tcfail068.stderr
testsuite/tests/typecheck/should_fail/tcfail076.stderr
testsuite/tests/typecheck/should_fail/tcfail083.stderr
testsuite/tests/typecheck/should_fail/tcfail090.stderr
testsuite/tests/typecheck/should_fail/tcfail099.stderr
testsuite/tests/typecheck/should_fail/tcfail102.stderr
testsuite/tests/typecheck/should_fail/tcfail103.stderr
testsuite/tests/typecheck/should_fail/tcfail106.stderr
testsuite/tests/typecheck/should_fail/tcfail109.stderr
testsuite/tests/typecheck/should_fail/tcfail122.stderr
testsuite/tests/typecheck/should_fail/tcfail123.hs
testsuite/tests/typecheck/should_fail/tcfail123.stderr
testsuite/tests/typecheck/should_fail/tcfail128.stderr
testsuite/tests/typecheck/should_fail/tcfail131.stderr
testsuite/tests/typecheck/should_fail/tcfail133.stderr
testsuite/tests/typecheck/should_fail/tcfail137.stderr
testsuite/tests/typecheck/should_fail/tcfail140.stderr
testsuite/tests/typecheck/should_fail/tcfail153.stderr
testsuite/tests/typecheck/should_fail/tcfail159.stderr
testsuite/tests/typecheck/should_fail/tcfail169.stderr
testsuite/tests/typecheck/should_fail/tcfail174.stderr
testsuite/tests/typecheck/should_fail/tcfail175.stderr
testsuite/tests/typecheck/should_fail/tcfail178.stderr
testsuite/tests/typecheck/should_fail/tcfail179.stderr
testsuite/tests/typecheck/should_fail/tcfail182.stderr
testsuite/tests/typecheck/should_fail/tcfail189.stderr
testsuite/tests/typecheck/should_fail/tcfail190.stderr
testsuite/tests/typecheck/should_fail/tcfail192.stderr
testsuite/tests/typecheck/should_fail/tcfail194.stderr
testsuite/tests/typecheck/should_fail/tcfail198.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/tcfail208.stderr
testsuite/tests/typecheck/should_run/tcrun002.hs

index 3ce91af..8c8c329 100644 (file)
@@ -26,7 +26,10 @@ config.other_ways         = ['extcore','optextcore',
                              'prof_hc_hb','prof_hb',
                              'prof_hd','prof_hy','prof_hr',
                              'threaded1_ls', 'threaded2_hT',
-                             'llvm', 'debugllvm' ]
+                             'llvm', 'debugllvm',
+                             'profllvm', 'profoptllvm', 'profthreadedllvm',
+                             'threaded1llvm', 'threaded2llvm',
+                             'dynllvm']
 
 if (ghc_with_native_codegen == 1):
     config.compile_ways.append('optasm')
@@ -86,7 +89,14 @@ config.way_flags = {
     'prof_hd'      : ['-O', '-prof', '-auto-all'],
     'prof_hy'      : ['-O', '-prof', '-auto-all'],
     'prof_hr'      : ['-O', '-prof', '-auto-all'],
-    'dyn'          : ['-O', '-dynamic']
+    'dyn'          : ['-O', '-dynamic'],
+    # llvm variants...
+    'profllvm'         : ['-prof', '-auto-all', '-fllvm'],
+    'profoptllvm'      : ['-O', '-prof', '-auto-all', '-fllvm'],
+    'profthreadedllvm' : ['-O', '-prof', '-auto-all', '-threaded', '-fllvm'],
+    'threaded1llvm'    : ['-threaded', '-debug', '-fllvm'],
+    'threaded2llvm'    : ['-O', '-threaded', '-eventlog', '-fllvm'],
+    'dynllvm'          : ['-O', '-dynamic', '-fllvm']
    }
 
 config.way_rts_flags = { 
@@ -112,7 +122,14 @@ config.way_rts_flags = {
     'prof_hd'      : ['-hd'],
     'prof_hy'      : ['-hy'],
     'prof_hr'      : ['-hr'],
-    'dyn'          : []
+    'dyn'          : [],
+    # llvm variants...
+    'profllvm'         : ['-p'],
+    'profoptllvm'      : ['-hc', '-p'],
+    'profthreadedllvm' : ['-p'],
+    'threaded1llvm'    : [],
+    'threaded2llvm'    : ['-N2 -ls'],
+    'dynllvm'          : []
    }
 
 # Useful classes of ways that can be used with only_ways() and
index d7e63d1..3f714f3 100644 (file)
@@ -255,6 +255,9 @@ class TestOptions:
        # Should we redirect stdout and stderr to a single file?
        self.combined_output = False
 
+       # How should the timeout be adjusted on this test?
+       self.timeout_multiplier = 1.0
+
 # The default set of options
 global default_testopts
 default_testopts = TestOptions()
index ed7cbf7..5853413 100644 (file)
@@ -14,6 +14,7 @@ import traceback
 import copy
 import glob
 import types
+import math
 
 have_subprocess = False
 try:
@@ -218,6 +219,14 @@ def _exit_code( opts, v ):
 
 # -----
 
+def timeout_multiplier( val ):
+    return lambda opts, v=val: _timeout_multiplier(opts, v)
+
+def _timeout_multiplier( opts, v ):
+    opts.timeout_multiplier = v
+
+# -----
+
 def extra_run_opts( val ):
     return lambda opts, v=val: _extra_run_opts(opts, v);
 
@@ -1156,7 +1165,7 @@ def simple_run( name, way, prog, args ):
     my_rts_flags = rts_flags(way)
 
     stats_file = name + '.stats'
-    if len(opts.stats_num_fields) > 0:
+    if len(opts.stats_num_fields) + len(opts.stats_range_fields) > 0:
         args += ' +RTS -V0 -t' + stats_file + ' --machine-readable -RTS'
 
     if opts.no_stdin:
@@ -1176,13 +1185,13 @@ def simple_run( name, way, prog, args ):
         + stdin_comes_from         \
         + redirection
 
-    if getTestOpts().cmd_wrapper != None:
-        cmd = getTestOpts().cmd_wrapper(cmd);
+    if opts.cmd_wrapper != None:
+        cmd = opts.cmd_wrapper(cmd);
 
-    cmd = 'cd ' + getTestOpts().testdir + ' && ' + cmd
+    cmd = 'cd ' + opts.testdir + ' && ' + cmd
 
     # run the command
-    result = runCmdFor(name, cmd)
+    result = runCmdFor(name, cmd, timeout_multiplier=opts.timeout_multiplier)
 
     exit_code = result >> 8
     signal    = result & 0xff
@@ -1198,9 +1207,11 @@ def simple_run( name, way, prog, args ):
     check_prof = my_rts_flags.find("-p") != -1
 
     if not opts.ignore_output:
-        if not opts.combined_output and not check_stderr_ok(name):
+        bad_stderr = not opts.combined_output and not check_stderr_ok(name)
+        bad_stdout = not check_stdout_ok(name)
+        if bad_stderr:
             return failBecause('bad stderr')
-        if not check_stdout_ok(name):
+        if bad_stdout:
             return failBecause('bad stdout')
         # exit_code > 127 probably indicates a crash, so don't try to run hp2ps.
         if check_hp and (exit_code <= 127 or exit_code == 251) and not check_hp_ok(name):
@@ -1285,7 +1296,7 @@ def interpreter_run( name, way, extra_hc_opts, compile_only, top_mod ):
 
     cmd = 'cd ' + getTestOpts().testdir + " && " + cmd
 
-    result = runCmdFor(name, cmd)
+    result = runCmdFor(name, cmd, timeout_multiplier=getTestOpts().timeout_multiplier)
 
     exit_code = result >> 8
     signal    = result & 0xff
@@ -1712,23 +1723,24 @@ def runCmd( cmd ):
         r = os.system(cmd)
     return r << 8
 
-def runCmdFor( name, cmd ):
+def runCmdFor( name, cmd, timeout_multiplier=1.0 ):
     if_verbose( 1, cmd )
     r = 0
     if config.os == 'mingw32':
         # On MinGW, we will always have timeout
         assert config.timeout_prog!=''
+    timeout = int(math.ceil(config.timeout * timeout_multiplier))
 
     if config.timeout_prog != '':
         if config.check_files_written:
             fn = name + ".strace"
             r = rawSystem(["strace", "-o", fn, "-fF", "-e", "creat,open,chdir,clone,vfork",
-                           config.timeout_prog, str(config.timeout),
+                           config.timeout_prog, str(timeout),
                            cmd])
             addTestFilesWritten(name, fn)
             rm_no_fail(fn)
         else:
-            r = rawSystem([config.timeout_prog, str(config.timeout), cmd])
+            r = rawSystem([config.timeout_prog, str(timeout), cmd])
     else:
         r = os.system(cmd)
     return r << 8
index 4e861c6..04329ee 100644 (file)
@@ -2,7 +2,5 @@
 annfail05.hs:11:1:
     No instance for (Data.Data.Data NoInstances)
       arising from an annotation
-    Possible fix:
-      add an instance declaration for (Data.Data.Data NoInstances)
     In the expression: NoInstances
     In the annotation: {-# ANN f NoInstances #-}
index d10fbe5..df18d00 100644 (file)
@@ -2,13 +2,10 @@
 annfail08.hs:9:1:
     No instance for (Data.Data.Data (a0 -> a0))
       arising from an annotation
-    Possible fix:
-      add an instance declaration for (Data.Data.Data (a0 -> a0))
     In the expression: (id + 1)
     In the annotation: {-# ANN f (id + 1) #-}
 
 annfail08.hs:9:15:
     No instance for (Num (a0 -> a0)) arising from a use of `+'
-    Possible fix: add an instance declaration for (Num (a0 -> a0))
     In the expression: (id + 1)
     In the annotation: {-# ANN f (id + 1) #-}
index 7e0004f..1d3fa3a 100644 (file)
@@ -1,24 +1,31 @@
-\r
-T5380.hs:7:27:\r
-    Couldn't match expected type `not_bool' with actual type `Bool'\r
-      `not_bool' is a rigid type variable bound by\r
-                 the type signature for\r
-                   testB :: not_bool -> (() -> ()) -> () -> not_unit\r
-                 at T5380.hs:6:10\r
-    In the expression: b\r
-    In the expression: proc () -> if b then f -< () else f -< ()\r
-    In an equation for `testB':\r
-        testB b f = proc () -> if b then f -< () else f -< ()\r
-\r
-T5380.hs:7:34:\r
-    Couldn't match type `not_unit' with `()'\r
-      `not_unit' is a rigid type variable bound by\r
-                 the type signature for\r
-                   testB :: not_bool -> (() -> ()) -> () -> not_unit\r
-                 at T5380.hs:6:10\r
-    Expected type: () -> not_unit\r
-      Actual type: () -> ()\r
-    In the expression: f\r
-    In the expression: proc () -> if b then f -< () else f -< ()\r
-    In an equation for `testB':\r
-        testB b f = proc () -> if b then f -< () else f -< ()\r
+
+T5380.hs:7:27:
+    Couldn't match expected type `Bool' with actual type `not_bool'
+      `not_bool' is a rigid type variable bound by
+                 the type signature for
+                   testB :: not_bool -> (() -> ()) -> () -> not_unit
+                 at T5380.hs:6:10
+    Relevant bindings include
+      testB :: not_bool -> (() -> ()) -> () -> not_unit
+        (bound at T5380.hs:7:1)
+      b :: not_bool (bound at T5380.hs:7:7)
+    In the expression: b
+    In the expression: proc () -> if b then f -< () else f -< ()
+    In an equation for `testB':
+        testB b f = proc () -> if b then f -< () else f -< ()
+
+T5380.hs:7:34:
+    Couldn't match type `not_unit' with `()'
+      `not_unit' is a rigid type variable bound by
+                 the type signature for
+                   testB :: not_bool -> (() -> ()) -> () -> not_unit
+                 at T5380.hs:6:10
+    Expected type: () -> not_unit
+      Actual type: () -> ()
+    Relevant bindings include
+      testB :: not_bool -> (() -> ()) -> () -> not_unit
+        (bound at T5380.hs:7:1)
+    In the expression: f
+    In the expression: proc () -> if b then f -< () else f -< ()
+    In an equation for `testB':
+        testB b f = proc () -> if b then f -< () else f -< ()
index 68ee7cf..261aa27 100644 (file)
@@ -1,8 +1,7 @@
-\r
-arrowfail001.hs:16:36:\r
-    No instance for (Foo a)\r
-      arising from a use of `foo'\r
-    In the expression: foo\r
-    In the expression: proc x -> case x of { Bar a -> foo -< a }\r
-    In an equation for `get':\r
-        get = proc x -> case x of { Bar a -> foo -< a }\r
+
+arrowfail001.hs:16:36:
+    No instance for (Foo a) arising from a use of `foo'
+    In the expression: foo
+    In the expression: proc x -> case x of { Bar a -> foo -< a }
+    In an equation for `get':
+        get = proc x -> case x of { Bar a -> foo -< a }
diff --git a/testsuite/tests/codeGen/should_compile/T7237.hs b/testsuite/tests/codeGen/should_compile/T7237.hs
new file mode 100644 (file)
index 0000000..8407d8d
--- /dev/null
@@ -0,0 +1,10 @@
+module T7237 where
+
+import Data.List (foldl')
+
+data SPair = SPair { pX, pY :: Double } deriving (Eq,Show)
+
+data AList = AList { pairs :: [SPair] } deriving Show
+
+rnf' :: AList -> ()
+rnf' aList = foldl' (flip seq) () (pairs aList) `seq` ()
index 1899cfd..fb65586 100644 (file)
@@ -20,3 +20,4 @@ test('massive_array',
      [ if_arch('i386', expect_broken(7213)),
        if_arch('i386', omit_ways(['llvm', 'optllvm'])) ],
      compile, ['-fPIC'])
+test('T7237', normal, compile, [''])
diff --git a/testsuite/tests/concurrent/should_run/367.hs b/testsuite/tests/concurrent/should_run/367.hs
new file mode 100644 (file)
index 0000000..52f41a3
--- /dev/null
@@ -0,0 +1,10 @@
+{-# LANGUAGE MagicHash #-}
+
+import Control.Concurrent
+import qualified Data.Vector as U
+
+main = do
+    t <- forkIO (U.sum (U.enumFromTo 1 (1000000000 :: Int)) `seq` return ())
+    threadDelay 10
+    killThread t
+    putStrLn "Done"
diff --git a/testsuite/tests/concurrent/should_run/367.stdout b/testsuite/tests/concurrent/should_run/367.stdout
new file mode 100644 (file)
index 0000000..a965a70
--- /dev/null
@@ -0,0 +1 @@
+Done
diff --git a/testsuite/tests/concurrent/should_run/367_letnoescape.hs b/testsuite/tests/concurrent/should_run/367_letnoescape.hs
new file mode 100644 (file)
index 0000000..5230509
--- /dev/null
@@ -0,0 +1,23 @@
+{-# LANGUAGE MagicHash #-}
+
+-- Should be compiled with -O0
+
+import Control.Concurrent
+import GHC.Conc
+import GHC.Prim
+import GHC.Exts
+
+main = do
+    t <- forkIO (f 0 `seq` return ())
+    threadDelay 10
+    killThread t
+    putStrLn "Done"
+
+-- Non-allocating let-no-escape infinite loop in fail
+{-# NOINLINE f #-}
+f :: Int -> Bool
+f i@(I# j) = let fail :: Int# -> Bool
+                 fail i = fail (i +# 1#)
+      in if (case i of
+            0 -> True
+            _ -> False) then fail j else False
diff --git a/testsuite/tests/concurrent/should_run/367_letnoescape.stdout b/testsuite/tests/concurrent/should_run/367_letnoescape.stdout
new file mode 100644 (file)
index 0000000..a965a70
--- /dev/null
@@ -0,0 +1 @@
+Done
index 47d2a78..71b821f 100644 (file)
@@ -21,6 +21,10 @@ test('conc071', omit_ways(['threaded2']), compile_and_run, [''])
 test('conc072', only_ways(['threaded2']), compile_and_run, [''])
 test('conc073', normal, compile_and_run, [''])
 
+# vector code must get inlined to become non-allocating
+test('367', composes([reqlib('vector'), timeout_multiplier(0.001)]), compile_and_run, ['-O2 -fno-omit-yields'])
+test('367_letnoescape', composes([timeout_multiplier(0.001)]), compile_and_run, ['-fno-omit-yields'])
+
 test('1980', normal, compile_and_run, [''])
 test('2910', normal, compile_and_run, [''])
 test('2910a', normal, compile_and_run, [''])
index a6cbe41..f732783 100644 (file)
@@ -1,8 +1,14 @@
-TOP=../../..\r
-include $(TOP)/mk/boilerplate.mk\r
-include $(TOP)/mk/test.mk\r
-\r
-T5252:\r
-       $(RM) -f T5252*.hi T5252*.o\r
-       '$(TEST_HC)' $(TEST_HC_OPTS) -c T5252a.hs \r
-       '$(TEST_HC)' $(TEST_HC_OPTS) -c T5252.hs\r
+TOP=../../..
+include $(TOP)/mk/boilerplate.mk
+include $(TOP)/mk/test.mk
+
+T5252:
+       $(RM) -f T5252*.hi T5252*.o
+       '$(TEST_HC)' $(TEST_HC_OPTS) -c T5252a.hs 
+       '$(TEST_HC)' $(TEST_HC_OPTS) -c T5252.hs
+
+# Failed when compiled *without* optimisation
+T5252Take2:
+       $(RM) -f T5252*.hi T5252*.o
+       '$(TEST_HC)' $(TEST_HC_OPTS) -c T5252Take2a.hs 
+       '$(TEST_HC)' $(TEST_HC_OPTS) -c T5252Take2.hs
diff --git a/testsuite/tests/deSugar/should_compile/T5252Take2.hs b/testsuite/tests/deSugar/should_compile/T5252Take2.hs
new file mode 100644 (file)
index 0000000..64e64af
--- /dev/null
@@ -0,0 +1,5 @@
+module T5252Take2 where
+import qualified T5252Take2a as M
+
+write_message :: M.WriteMessage -> IO Bool
+write_message (M.WriteMessage _) = return True
diff --git a/testsuite/tests/deSugar/should_compile/T5252Take2a.hs b/testsuite/tests/deSugar/should_compile/T5252Take2a.hs
new file mode 100644 (file)
index 0000000..0bccace
--- /dev/null
@@ -0,0 +1,8 @@
+{-# OPTIONS_GHC -funbox-strict-fields #-}
+module T5252Take2a ( WriteMessage(..) , WriteDevice ) where
+
+import qualified Data.ByteString as ByteString
+
+data WriteMessage = WriteMessage !WriteDevice
+newtype WriteDevice = WriteDevice ByteString.ByteString
index 35d5325..51e747f 100644 (file)
@@ -95,3 +95,9 @@ test('T5001',
       extra_clean(['T5001a.hi', 'T5001a.o'])],
      multimod_compile,
      ['T5001', '-v0'])
+
+# T5252Take2 failed when compiled *wihtout* optimisation
+test('T5252Take2',
+     extra_clean(['T5252Take2a.hi', 'T5252Take2a.o']),
+     run_command, 
+     ['$MAKE -s --no-print-directory T5252Take2'])
index a2beb98..70802ab 100644 (file)
@@ -3,7 +3,6 @@ T2851.hs:9:15:
     No instance for (Show (F a))
       arising from the 'deriving' clause of a data type declaration
     Possible fix:
-      add an instance declaration for (Show (F a))
-      or use a standalone 'deriving instance' declaration,
-           so you can specify the instance context yourself
+      use a standalone 'deriving instance' declaration,
+        so you can specify the instance context yourself
     When deriving the instance for (Show (D a))
index 68213c6..b70fc33 100644 (file)
@@ -3,7 +3,6 @@ T3621.hs:21:21:
     No instance for (MonadState state (State s))
       arising from the 'deriving' clause of a data type declaration
     Possible fix:
-      add an instance declaration for (MonadState state (State s))
-      or use a standalone 'deriving instance' declaration,
-           so you can specify the instance context yourself
+      use a standalone 'deriving instance' declaration,
+        so you can specify the instance context yourself
     When deriving the instance for (MonadState state (WrappedState s))
index 5db2d85..cb1259c 100644 (file)
@@ -4,5 +4,6 @@ class A a oops
 data D d = D d
 instance A a oops => Read (D a)
 data E e = E (D e) deriving Read
+instance A Int Bool
 
 
index 93ea7d6..d74166e 100644 (file)
@@ -2,6 +2,10 @@
 T5287.hs:6:29:
     No instance for (A e oops)
       arising from the 'deriving' clause of a data type declaration
+    The type variable `oops' is ambiguous
+    Possible fix: add a type signature that fixes these type variable(s)
+    Note: there is a potential instance available:
+      instance A Int Bool -- Defined at T5287.hs:7:10
     Possible fix:
       use a standalone 'deriving instance' declaration,
         so you can specify the instance context yourself
index b9d1eb5..fa5633e 100644 (file)
@@ -1,28 +1,26 @@
-\r
-drvfail-foldable-traversable1.hs:9:23:\r
-    No instance for (Functor Trivial1)\r
-      arising from the 'deriving' clause of a data type declaration\r
-    Possible fix:\r
-      add an instance declaration for (Functor Trivial1)\r
-      or use a standalone 'deriving instance' declaration,\r
-           so you can specify the instance context yourself\r
-    When deriving the instance for (Traversable Trivial1)\r
-\r
-drvfail-foldable-traversable1.hs:13:22:\r
-    No instance for (Foldable Trivial2)\r
-      arising from the 'deriving' clause of a data type declaration\r
-    Possible fix:\r
-      add an instance declaration for (Foldable Trivial2)\r
-      or use a standalone 'deriving instance' declaration,\r
-           so you can specify the instance context yourself\r
-    When deriving the instance for (Traversable Trivial2)\r
-\r
-drvfail-foldable-traversable1.hs:17:22:\r
-    Can't make a derived instance of `Foldable Infinite':\r
-      Constructor `Infinite' must not contain function types\r
-    In the data declaration for `Infinite'\r
-\r
-drvfail-foldable-traversable1.hs:21:22:\r
-    Can't make a derived instance of `Traversable (Cont r)':\r
-      Constructor `Cont' must not contain function types\r
-    In the data declaration for `Cont'\r
+
+drvfail-foldable-traversable1.hs:9:23:
+    No instance for (Functor Trivial1)
+      arising from the 'deriving' clause of a data type declaration
+    Possible fix:
+      use a standalone 'deriving instance' declaration,
+        so you can specify the instance context yourself
+    When deriving the instance for (Traversable Trivial1)
+
+drvfail-foldable-traversable1.hs:13:22:
+    No instance for (Foldable Trivial2)
+      arising from the 'deriving' clause of a data type declaration
+    Possible fix:
+      use a standalone 'deriving instance' declaration,
+        so you can specify the instance context yourself
+    When deriving the instance for (Traversable Trivial2)
+
+drvfail-foldable-traversable1.hs:17:22:
+    Can't make a derived instance of `Foldable Infinite':
+      Constructor `Infinite' must not contain function types
+    In the data declaration for `Infinite'
+
+drvfail-foldable-traversable1.hs:21:22:
+    Can't make a derived instance of `Traversable (Cont r)':
+      Constructor `Cont' must not contain function types
+    In the data declaration for `Cont'
index 9c830aa..54dc6f7 100644 (file)
@@ -1,32 +1,31 @@
-\r
-drvfail-functor2.hs:1:29: Warning:\r
-    -XDatatypeContexts is deprecated: It was widely considered a misfeature, and has been removed from the Haskell language.\r
-\r
-drvfail-functor2.hs:7:14:\r
-    Can't make a derived instance of `Functor InFunctionArgument':\r
-      Constructor `InFunctionArgument' must not use the type variable in a function argument\r
-    In the newtype declaration for `InFunctionArgument'\r
-\r
-drvfail-functor2.hs:10:14:\r
-    Can't make a derived instance of `Functor OnSecondArg':\r
-      Constructor `OnSecondArg' must use the type variable only as the last argument of a data type\r
-    In the newtype declaration for `OnSecondArg'\r
-\r
-drvfail-functor2.hs:15:14:\r
-    Cannot derive well-kinded instance of form `Functor (NoArguments ...)'\r
-      Class `Functor' expects an argument of kind `* -> *'\r
-    In the newtype declaration for `NoArguments'\r
-\r
-drvfail-functor2.hs:20:14:\r
-    Can't make a derived instance of `Functor StupidConstraint':\r
-      Data type `StupidConstraint' must not have a class context (Eq a)\r
-    In the data declaration for `StupidConstraint'\r
-\r
-drvfail-functor2.hs:26:14:\r
-    No instance for (Functor NoFunctor)\r
-      arising from the 'deriving' clause of a data type declaration\r
-    Possible fix:\r
-      add an instance declaration for (Functor NoFunctor)\r
-      or use a standalone 'deriving instance' declaration,\r
-           so you can specify the instance context yourself\r
-    When deriving the instance for (Functor UseNoFunctor)\r
+
+drvfail-functor2.hs:1:29: Warning:
+    -XDatatypeContexts is deprecated: It was widely considered a misfeature, and has been removed from the Haskell language.
+
+drvfail-functor2.hs:7:14:
+    Can't make a derived instance of `Functor InFunctionArgument':
+      Constructor `InFunctionArgument' must not use the type variable in a function argument
+    In the newtype declaration for `InFunctionArgument'
+
+drvfail-functor2.hs:10:14:
+    Can't make a derived instance of `Functor OnSecondArg':
+      Constructor `OnSecondArg' must use the type variable only as the last argument of a data type
+    In the newtype declaration for `OnSecondArg'
+
+drvfail-functor2.hs:15:14:
+    Cannot derive well-kinded instance of form `Functor (NoArguments ...)'
+      Class `Functor' expects an argument of kind `* -> *'
+    In the newtype declaration for `NoArguments'
+
+drvfail-functor2.hs:20:14:
+    Can't make a derived instance of `Functor StupidConstraint':
+      Data type `StupidConstraint' must not have a class context (Eq a)
+    In the data declaration for `StupidConstraint'
+
+drvfail-functor2.hs:26:14:
+    No instance for (Functor NoFunctor)
+      arising from the 'deriving' clause of a data type declaration
+    Possible fix:
+      use a standalone 'deriving instance' declaration,
+        so you can specify the instance context yourself
+    When deriving the instance for (Functor UseNoFunctor)
index a2a1495..8c0be37 100644 (file)
@@ -3,7 +3,6 @@ drvfail001.hs:16:33:
     No instance for (Show (f (f a)))
       arising from the 'deriving' clause of a data type declaration
     Possible fix:
-      add an instance declaration for (Show (f (f a)))
-      or use a standalone 'deriving instance' declaration,
-           so you can specify the instance context yourself
+      use a standalone 'deriving instance' declaration,
+        so you can specify the instance context yourself
     When deriving the instance for (Show (SM f a))
index 281c6a3..20d54c6 100644 (file)
@@ -3,7 +3,6 @@ drvfail002.hs:19:23:
     No instance for (X T c)
       arising from the 'deriving' clause of a data type declaration
     Possible fix:
-      add an instance declaration for (X T c)
-      or use a standalone 'deriving instance' declaration,
-           so you can specify the instance context yourself
+      use a standalone 'deriving instance' declaration,
+        so you can specify the instance context yourself
     When deriving the instance for (Show S)
index 4aa9853..f329420 100644 (file)
@@ -3,7 +3,6 @@ drvfail003.hs:16:56:
     No instance for (Show (v (v a)))
       arising from the 'deriving' clause of a data type declaration
     Possible fix:
-      add an instance declaration for (Show (v (v a)))
-      or use a standalone 'deriving instance' declaration,
-           so you can specify the instance context yourself
+      use a standalone 'deriving instance' declaration,
+        so you can specify the instance context yourself
     When deriving the instance for (Show (Square_ v w a))
index d08f315..fe193b9 100644 (file)
@@ -3,7 +3,6 @@ drvfail004.hs:8:12:
     No instance for (Eq (Foo a b))
       arising from the 'deriving' clause of a data type declaration
     Possible fix:
-      add an instance declaration for (Eq (Foo a b))
-      or use a standalone 'deriving instance' declaration,
-           so you can specify the instance context yourself
+      use a standalone 'deriving instance' declaration,
+        so you can specify the instance context yourself
     When deriving the instance for (Ord (Foo a b))
index 7dc7124..d47c14e 100644 (file)
@@ -3,7 +3,6 @@ drvfail007.hs:4:38:
     No instance for (Eq (Int -> Int))
       arising from the 'deriving' clause of a data type declaration
     Possible fix:
-      add an instance declaration for (Eq (Int -> Int))
-      or use a standalone 'deriving instance' declaration,
-           so you can specify the instance context yourself
+      use a standalone 'deriving instance' declaration,
+        so you can specify the instance context yourself
     When deriving the instance for (Eq Foo)
index 22fac48..602033f 100644 (file)
@@ -3,7 +3,6 @@ drvfail012.hs:5:33:
     No instance for (Eq (Ego a))
       arising from the 'deriving' clause of a data type declaration
     Possible fix:
-      add an instance declaration for (Eq (Ego a))
-      or use a standalone 'deriving instance' declaration,
-           so you can specify the instance context yourself
+      use a standalone 'deriving instance' declaration,
+        so you can specify the instance context yourself
     When deriving the instance for (Ord (Ego a))
index 94927cd..29d8ba6 100644 (file)
@@ -3,16 +3,14 @@ drvfail013.hs:4:70:
     No instance for (Eq (m (Maybe a)))
       arising from the 'deriving' clause of a data type declaration
     Possible fix:
-      add an instance declaration for (Eq (m (Maybe a)))
-      or use a standalone 'deriving instance' declaration,
-           so you can specify the instance context yourself
+      use a standalone 'deriving instance' declaration,
+        so you can specify the instance context yourself
     When deriving the instance for (Eq (MaybeT m a))
 
 drvfail013.hs:6:70:
     No instance for (Eq (m (Maybe a)))
       arising from the 'deriving' clause of a data type declaration
     Possible fix:
-      add an instance declaration for (Eq (m (Maybe a)))
-      or use a standalone 'deriving instance' declaration,
-           so you can specify the instance context yourself
+      use a standalone 'deriving instance' declaration,
+        so you can specify the instance context yourself
     When deriving the instance for (Eq (MaybeT' m a))
index 348edca..585dffa 100644 (file)
@@ -45,7 +45,8 @@ expectedGhcOnlyExtensions = ["ParallelArrays",
                              "InstanceSigs",
                              "CApiFFI",
                              "LambdaCase",
-                             "MultiWayIf"]
+                             "MultiWayIf",
+                             "TypeHoles"]
 
 expectedCabalOnlyExtensions :: [String]
 expectedCabalOnlyExtensions = ["Generics",
index 9d37468..6e8427b 100644 (file)
@@ -1,6 +1,5 @@
 
 A.hs:6:15:
     No instance for (Show (Fields v)) arising from a use of `show'
-    Possible fix: add an instance declaration for (Show (Fields v))
     In the expression: show a
     In an equation for `showField': showField a = show a
diff --git a/testsuite/tests/ext-core/Makefile b/testsuite/tests/ext-core/Makefile
new file mode 100644 (file)
index 0000000..d52dd9c
--- /dev/null
@@ -0,0 +1,29 @@
+TOP=../..
+include $(TOP)/mk/boilerplate.mk
+include $(TOP)/mk/test.mk
+
+# T5881 needs a script because it goes wrong only when 
+# the modules are compiled separately, not with --make
+T5881:
+       $(RM) -f T5881.hi T5881.o T5881a.hi T5881a.o
+       '$(TEST_HC)' $(TEST_HC_OPTS) -c T5881a.hs
+       '$(TEST_HC)' $(TEST_HC_OPTS) -c T5881.hs
+
+# T6025 is like T5881; needs separate compile
+T6025:
+       $(RM) -f T6025.hi T6025.o T6025a.hi T6025a.o
+       '$(TEST_HC)' $(TEST_HC_OPTS) -c T6025a.hs
+       '$(TEST_HC)' $(TEST_HC_OPTS) -c T6025.hs
+
+# T6054 is like T5881; needs separate compile
+# The second compile fails, and should do so, hence leading "-"
+T6054:
+       $(RM) -f T6054.hi T6054.o T6054a.hi T6054a.o
+       '$(TEST_HC)' $(TEST_HC_OPTS) -c T6054a.hs
+       -'$(TEST_HC)' $(TEST_HC_OPTS) -c T6054.hs
+
+T7022:
+       $(RM) -f T7022.hi T7022.o T7022a.hi T7022a.o T7022b.hi T7022b.o
+       '$(TEST_HC)' $(TEST_HC_OPTS) -c T7022a.hs
+       '$(TEST_HC)' $(TEST_HC_OPTS) -c T7022b.hs -v0
+       -'$(TEST_HC)' $(TEST_HC_OPTS) -c -v0 T7022.hs
diff --git a/testsuite/tests/ext-core/T7239.hs b/testsuite/tests/ext-core/T7239.hs
new file mode 100644 (file)
index 0000000..4331b9e
--- /dev/null
@@ -0,0 +1,8 @@
+module Main where
+
+data T a = T a
+
+type C = T Int
+type CL = [C]
+
+main = print 1
diff --git a/testsuite/tests/ext-core/all.T b/testsuite/tests/ext-core/all.T
new file mode 100644 (file)
index 0000000..a1fbb8b
--- /dev/null
@@ -0,0 +1,3 @@
+setTestOpts(only_compiler_types(['ghc']))
+
+test('T7239', normal, compile, ['-fext-core'])
index 7ca72f9..62f49d4 100644 (file)
@@ -1,17 +1,5 @@
 
 T3169.hs:13:22:
-    Could not deduce (Map a ~ MP a b)
-    from the context (Key a, Key b)
-      bound by the instance declaration at T3169.hs:10:10-36
-    Expected type: Map a (Map b elt)
-      Actual type: Map (a, b) elt
-    In the second argument of `lookup', namely `m'
-    In the expression: lookup a m :: Maybe (Map b elt)
-    In the expression:
-      case lookup a m :: Maybe (Map b elt) of {
-        Just (m2 :: Map b elt) -> lookup b m2 :: Maybe elt }
-
-T3169.hs:13:22:
     Could not deduce (elt ~ Map b elt)
     from the context (Key a, Key b)
       bound by the instance declaration at T3169.hs:10:10-36
@@ -21,6 +9,11 @@ T3169.hs:13:22:
             at T3169.hs:12:3
     Expected type: Map a (Map b elt)
       Actual type: Map (a, b) elt
+    Relevant bindings include
+      lookup :: (a, b) -> Map (a, b) elt -> Maybe elt
+        (bound at T3169.hs:12:3)
+      b :: b (bound at T3169.hs:12:13)
+      m :: Map (a, b) elt (bound at T3169.hs:12:17)
     In the second argument of `lookup', namely `m'
     In the expression: lookup a m :: Maybe (Map b elt)
     In the expression:
diff --git a/testsuite/tests/gadt/T7205.hs b/testsuite/tests/gadt/T7205.hs
new file mode 100644 (file)
index 0000000..e8c5559
--- /dev/null
@@ -0,0 +1,15 @@
+{-# LANGUAGE GADTs, MultiParamTypeClasses, FlexibleInstances, FlexibleContexts #-}
+module T7205 where
+
+data Abs env g v where
+  Abs :: g (a, env) h v -> Abs env (g (a, env) h v) (a -> v)
+
+class Eval g env h v where
+  eval :: env -> g env h v -> v
+
+evalAbs :: Eval g2 (a2, env) h2 v2 
+       => env 
+       -> Abs env (g2 (a2, env) h2 v2) (a2->v2) 
+       -> (a2->v2)
+evalAbs env (Abs e) x 
+  = eval (x, env) e    -- e :: g (a,env) h v
index d846c64..ac56021 100644 (file)
@@ -91,7 +91,7 @@ test('Session', normal, compile_and_run, [''])
 test('CasePrune', normal, compile_and_run, [''])
 
 test('T1999', normal, compile, [''])
-test('T1999a', expect_broken(1999), compile, [''])
+test('T1999a', normal, compile, [''])
 
 test('T2587', normal, compile, [''])
 test('T2040', normal, compile, [''])
@@ -112,4 +112,5 @@ test('T5424',
      multimod_compile,
      ['T5424', '-v0 -O0'])
 
-test('FloatEq', normal, compile, [''])
\ No newline at end of file
+test('FloatEq', normal, compile, [''])
+test('T7205', normal, compile, [''])
index 418afad..ef5453c 100644 (file)
@@ -1,20 +1,28 @@
-\r
-rw.hs:14:47:\r
-    Couldn't match expected type `a' with actual type `Int'\r
-      `a' is a rigid type variable bound by\r
-          the type signature for writeInt :: T a -> IORef a -> IO ()\r
-          at rw.hs:12:12\r
-    In the second argument of `writeIORef', namely `(1 :: Int)'\r
-    In the expression: writeIORef ref (1 :: Int)\r
-    In a case alternative: ~(Li x) -> writeIORef ref (1 :: Int)\r
-\r
-rw.hs:19:51:\r
-    Couldn't match type `a' with `Bool'\r
-      `a' is a rigid type variable bound by\r
-          the type signature for readBool :: T a -> IORef a -> IO ()\r
-          at rw.hs:16:12\r
-    Expected type: a -> Bool\r
-      Actual type: Bool -> Bool\r
-    In the second argument of `(.)', namely `not'\r
-    In the second argument of `(>>=)', namely `(print . not)'\r
-    In the expression: readIORef ref >>= (print . not)\r
+
+rw.hs:14:47:
+    Couldn't match expected type `a' with actual type `Int'
+      `a' is a rigid type variable bound by
+          the type signature for writeInt :: T a -> IORef a -> IO ()
+          at rw.hs:12:12
+    Relevant bindings include
+      writeInt :: T a -> IORef a -> IO () (bound at rw.hs:13:1)
+      v :: T a (bound at rw.hs:13:10)
+      ref :: IORef a (bound at rw.hs:13:12)
+    In the second argument of `writeIORef', namely `(1 :: Int)'
+    In the expression: writeIORef ref (1 :: Int)
+    In a case alternative: ~(Li x) -> writeIORef ref (1 :: Int)
+
+rw.hs:19:51:
+    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:16:12
+    Expected type: a -> Bool
+      Actual type: Bool -> Bool
+    Relevant bindings include
+      readBool :: T a -> IORef a -> IO () (bound at rw.hs:17:1)
+      v :: T a (bound at rw.hs:17:10)
+      ref :: IORef a (bound at rw.hs:17:12)
+    In the second argument of `(.)', namely `not'
+    In the second argument of `(>>=)', namely `(print . not)'
+    In the expression: readIORef ref >>= (print . not)
index e222819..291ab14 100644 (file)
@@ -9,7 +9,7 @@ GenCannotDoRep0.hs:13:45:
 
 GenCannotDoRep0.hs:17:1:
     Can't make a derived instance of `Generic (P Int)':
-      P must not be instantiated; try deriving `P Int' instead
+      P must not be instantiated; try deriving `P a' instead
     In the stand-alone deriving instance for `Generic (P Int)'
 
 GenCannotDoRep0.hs:26:1:
index 36c125b..03dc88b 100644 (file)
@@ -1,5 +1,4 @@
 
 <interactive>:5:1:
     No instance for (Show (t -> a)) arising from a use of `print'
-    Possible fix: add an instance declaration for (Show (t -> a))
     In a stmt of an interactive GHCi command: print it
index ae2585f..45f6f83 100644 (file)
@@ -3,6 +3,7 @@
     No instance for (Show a) arising from a use of `print'
     Cannot resolve unknown runtime type `a'
     Use :print or :force to determine these types
+    Relevant bindings include it :: a (bound at <interactive>:6:1)
     Note: there are several potential instances:
       instance Show Double -- Defined in `GHC.Float'
       instance Show Float -- Defined in `GHC.Float'
@@ -15,6 +16,7 @@
     No instance for (Show a) arising from a use of `print'
     Cannot resolve unknown runtime type `a'
     Use :print or :force to determine these types
+    Relevant bindings include it :: a (bound at <interactive>:8:1)
     Note: there are several potential instances:
       instance Show Double -- Defined in `GHC.Float'
       instance Show Float -- Defined in `GHC.Float'
index f23daf2..e5bcb7f 100644 (file)
@@ -3,6 +3,7 @@
     No instance for (Show a1) arising from a use of `print'
     Cannot resolve unknown runtime type `a1'
     Use :print or :force to determine these types
+    Relevant bindings include it :: a1 (bound at <interactive>:11:1)
     Note: there are several potential instances:
       instance Show a => Show (List1 a) -- Defined at ../Test.hs:11:12
       instance Show MyInt -- Defined at ../Test.hs:14:16
index 189b4b7..28f8596 100644 (file)
     In the expression: 'p'
     In an equation for `a': a = 'p'
 
-../../typecheck/should_run/Defer01.hs:18:9: Warning:
-    No instance for (Eq B) arising from a use of `=='
-    Possible fix: add an instance declaration for (Eq B)
-    In the expression: x == x
-    In an equation for `b': b x = x == x
-
-../../typecheck/should_run/Defer01.hs:28:5: Warning:
-    No instance for (Num (a -> a)) arising from the literal `1'
-    Possible fix: add an instance declaration for (Num (a -> a))
-    In the expression: 1
-    In an equation for `d': d = 1
+../../typecheck/should_run/Defer01.hs:25:4: Warning:
+    Couldn't match type `Int' with `Bool'
+    Inaccessible code in
+      a pattern with constructor
+        C2 :: Bool -> C Bool,
+      in an equation for `c'
+    In the pattern: C2 x
+    In an equation for `c': c (C2 x) = True
 
 ../../typecheck/should_run/Defer01.hs:31:5: Warning:
     Couldn't match expected type `Char -> t' with actual type `Char'
+    Relevant bindings include
+      f :: t (bound at ../../typecheck/should_run/Defer01.hs:31:1)
     The function `e' is applied to one argument,
     but its type `Char' has none
     In the expression: e 'q'
     In an equation for `f': f = e 'q'
 
-../../typecheck/should_run/Defer01.hs:34:8: Warning:
-    Couldn't match expected type `a' with actual type `Char'
-      `a' is a rigid type variable bound by
-          the type signature for h :: a -> (Char, Char)
-          at ../../typecheck/should_run/Defer01.hs:33:6
-    In the expression: x
-    In the expression: (x, 'c')
-    In an equation for `h': h x = (x, 'c')
-
 ../../typecheck/should_run/Defer01.hs:39:17: Warning:
     Couldn't match expected type `Bool' with actual type `T a'
+    Relevant bindings include
+      i :: a -> () (bound at ../../typecheck/should_run/Defer01.hs:39:1)
+      a :: a (bound at ../../typecheck/should_run/Defer01.hs:39:3)
     In the return type of a call of `K'
     In the first argument of `not', namely `(K a)'
     In the expression: (not (K a))
 
-../../typecheck/should_run/Defer01.hs:43:5: Warning:
-    No instance for (MyClass a1) arising from a use of `myOp'
-    In the expression: myOp 23
-    In an equation for `j': j = myOp 23
-
-../../typecheck/should_run/Defer01.hs:43:10: Warning:
-    No instance for (Num a1) arising from the literal `23'
-    The type variable `a1' is ambiguous
-    Possible fix: add a type signature that fixes these type variable(s)
-    Note: there are several potential instances:
-      instance Num Double -- Defined in `GHC.Float'
-      instance Num Float -- Defined in `GHC.Float'
-      instance Integral a => Num (GHC.Real.Ratio a)
-        -- Defined in `GHC.Real'
-      ...plus three others
-    In the first argument of `myOp', namely `23'
-    In the expression: myOp 23
-    In an equation for `j': j = myOp 23
+../../typecheck/should_run/Defer01.hs:45:6: Warning:
+    Couldn't match type `Int' with `Bool'
+    Inaccessible code in
+      the type signature for k :: Int ~ Bool => Int -> Bool
 
 ../../typecheck/should_run/Defer01.hs:46:7: Warning:
     Couldn't match expected type `Bool' with actual type `Int'
@@ -91,7 +70,6 @@
 (deferred type error)
 *** Exception: ../../typecheck/should_run/Defer01.hs:18:9:
     No instance for (Eq B) arising from a use of `=='
-    Possible fix: add an instance declaration for (Eq B)
     In the expression: x == x
     In an equation for `b': b x = x == x
 (deferred type error)
     In the first argument of `print', namely `(c (C2 True))'
 *** Exception: ../../typecheck/should_run/Defer01.hs:28:5:
     No instance for (Num (a -> a)) arising from the literal `1'
-    Possible fix: add an instance declaration for (Num (a -> a))
     In the expression: 1
     In an equation for `d': d = 1
 (deferred type error)
 *** Exception: ../../typecheck/should_run/Defer01.hs:31:5:
     Couldn't match expected type `Char -> t' with actual type `Char'
+    Relevant bindings include
+      f :: t (bound at ../../typecheck/should_run/Defer01.hs:31:1)
     The function `e' is applied to one argument,
     but its type `Char' has none
     In the expression: e 'q'
     In an equation for `f': f = e 'q'
 (deferred type error)
 *** Exception: ../../typecheck/should_run/Defer01.hs:34:8:
-    Couldn't match expected type `a' with actual type `Char'
+    Couldn't match expected type `Char' with actual type `a'
       `a' is a rigid type variable bound by
           the type signature for h :: a -> (Char, Char)
           at ../../typecheck/should_run/Defer01.hs:33:6
+    Relevant bindings include
+      h :: a -> (Char, Char)
+        (bound at ../../typecheck/should_run/Defer01.hs:34:1)
+      x :: a (bound at ../../typecheck/should_run/Defer01.hs:34:3)
     In the expression: x
     In the expression: (x, 'c')
     In an equation for `h': h x = (x, 'c')
 (deferred type error)
 *** Exception: ../../typecheck/should_run/Defer01.hs:39:17:
     Couldn't match expected type `Bool' with actual type `T a'
+    Relevant bindings include
+      i :: a -> () (bound at ../../typecheck/should_run/Defer01.hs:39:1)
+      a :: a (bound at ../../typecheck/should_run/Defer01.hs:39:3)
     In the return type of a call of `K'
     In the first argument of `not', namely `(K a)'
     In the expression: (not (K a))
index 80725e4..f31b5c4 100644 (file)
@@ -1,9 +1,14 @@
-\r
-<interactive>:6:49:\r
-    Couldn't match expected type `a'\r
-                with actual type `ListableElem (a, a)'\r
-      `a' is a rigid type variable bound by\r
-          the instance declaration at <interactive>:6:10\r
-    In the expression: a\r
-    In the expression: [a, b]\r
-    In an equation for `asList': asList (a, b) = [a, b]\r
+
+<interactive>:6:49:
+    Couldn't match expected type `a'
+                with actual type `ListableElem (a, a)'
+      `a' is a rigid type variable bound by
+          the instance declaration at <interactive>:6:10
+    Relevant bindings include
+      asList :: (a, a) -> [ListableElem (a, a)]
+        (bound at <interactive>:6:33)
+      a :: a (bound at <interactive>:6:41)
+      b :: a (bound at <interactive>:6:43)
+    In the expression: a
+    In the expression: [a, b]
+    In an equation for `asList': asList (a, b) = [a, b]
index 18221db..1665cca 100644 (file)
@@ -1,15 +1,18 @@
 
-Simple14.hs:17:12:
+Simple14.hs:17:19:
     Couldn't match type `z0' with `n'
       `z0' is untouchable
-           inside the constraints (Maybe m ~ Maybe n)
-           bound at a type expected by the context:
-                      Maybe m ~ Maybe n => EQ_ z0 z0
+        inside the constraints (Maybe m ~ Maybe n)
+        bound by a type expected by the context:
+                   Maybe m ~ Maybe n => EQ_ z0 z0
+        at Simple14.hs:17:12-33
       `n' is a rigid type variable bound by
           the type signature for foo :: EQ_ (Maybe m) (Maybe n)
           at Simple14.hs:16:17
     Expected type: EQ_ z0 z0
       Actual type: EQ_ m n
+    Relevant bindings include
+      foo :: EQ_ (Maybe m) (Maybe n) (bound at Simple14.hs:17:1)
     In the second argument of `eqE', namely `(eqI :: EQ_ m n)'
     In the first argument of `ntI', namely `(`eqE` (eqI :: EQ_ m n))'
     In the expression: ntI (`eqE` (eqI :: EQ_ m n))
index 012756a..075c74b 100644 (file)
@@ -9,14 +9,25 @@ class SUBST s where
 
 class OBJECT o where
     type OTerm o
-    apply :: (SUBST s, OTerm o ~ STerm s) => s -> o
+    apply :: (SUBST a, OTerm o ~ STerm a) => a -> o
 
 fce' :: (OTerm a ~ STerm a, OBJECT a, SUBST a) => a -> c
 fce' f = fce (apply f)
 -- f :: a
--- apply f :: (OBJECT a, SUBST a, OTerm o ~ STerm a) => o
+-- apply f :: (SUBST a, OBJECT o, OTerm o ~ STerm a) => o
 -- fce called with a=o, gives wanted (OTerm o ~ STerm o, OBJECT o, SUBST o)
+-- o is a unif var.
 
-
-fce :: (OTerm a ~ STerm a, OBJECT a, SUBST a) => a -> c
+fce :: (OTerm o ~ STerm o, OBJECT o, SUBST o) => o -> c
 fce f = fce' f
+
+
+{-  (OTerm a ~ STerm a, OBJECT a, SUBST a)
+ => (SUBST a, OBJECT o, OTerm o ~ STerm a, OTerm o ~ STerm o, OBJECT o, SUBST o)
+    
+ =     OTerm o ~ u1
+       STerm o ~ u1
+       Sterm a ~ u1
+
+ =  (SUBST a, OBJECT o, STerm o ~ STerm a, OTerm o ~ STerm o, OBJECT o, SUBST o)
+-}
\ No newline at end of file
index fc697fb..1026e5f 100644 (file)
@@ -1,14 +1,17 @@
 
 T3208b.hs:15:10:
-    Could not deduce (STerm a0 ~ STerm a)
+    Could not deduce (STerm o0 ~ STerm a)
     from the context (OTerm a ~ STerm a, OBJECT a, SUBST a)
       bound by the type signature for
                  fce' :: (OTerm a ~ STerm a, OBJECT a, SUBST a) => a -> c
       at T3208b.hs:14:9-56
     NB: `STerm' is a type function, and may not be injective
-    The type variable `a0' is ambiguous
+    The type variable `o0' is ambiguous
     Possible fix: add a type signature that fixes these type variable(s)
-    Expected type: STerm a0
-      Actual type: OTerm a0
+    Expected type: STerm o0
+      Actual type: OTerm o0
+    Relevant bindings include
+      fce' :: a -> c (bound at T3208b.hs:15:1)
+      f :: a (bound at T3208b.hs:15:6)
     In the expression: fce (apply f)
     In an equation for fce': fce' f = fce (apply f)
diff --git a/testsuite/tests/indexed-types/should_compile/T5591a.hs b/testsuite/tests/indexed-types/should_compile/T5591a.hs
new file mode 100644 (file)
index 0000000..9c1a2c7
--- /dev/null
@@ -0,0 +1,25 @@
+{-# LANGUAGE GADTs, TypeOperators, TypeFamilies, ScopedTypeVariables #-}
+module T5591a where
+
+data a :=: b where 
+    Refl :: a :=: a
+
+subst :: a :=: b -> f a -> f b
+subst Refl = id 
+
+-- Then this doesn't work (error message at the bottom):
+
+inj1 :: forall f a b. f a :=: f b -> a :=: b
+inj1 Refl = Refl
+
+-- But one can still construct it with a trick that Oleg used in the context of 
+-- Leibniz equality:
+
+type family Arg fa
+
+type instance Arg (f a) = a
+
+newtype Helper fa fa' = Helper { runHelper :: Arg fa :=: Arg fa' }
+
+inj2 :: forall f a b. f a :=: f b -> a :=: b
+inj2 p = runHelper (subst p (Helper Refl :: Helper (f a) (f a)))
diff --git a/testsuite/tests/indexed-types/should_compile/T5591b.hs b/testsuite/tests/indexed-types/should_compile/T5591b.hs
new file mode 100644 (file)
index 0000000..20f4225
--- /dev/null
@@ -0,0 +1,12 @@
+{-# LANGUAGE MultiParamTypeClasses, FunctionalDependencies, KindSignatures, 
+    GADTs, FlexibleInstances, FlexibleContexts #-}
+module T5591b where
+
+class Monad m => Effect p e r m | p e m -> r where
+  fin :: p e m -> e -> m r
+
+data ErrorEff :: * -> (* -> *) -> * where 
+  CatchError :: (e -> m a) -> ErrorEff ((e -> m a) -> m a) m
+
+instance Monad m => Effect ErrorEff ((e -> m a) -> m a) a m where
+  fin (CatchError h) = \f -> f h
index 9cdb7e5..b005962 100644 (file)
@@ -197,4 +197,7 @@ test('T6152',
 test('T6088', normal, compile, [''])
 test('T7082', normal, compile, [''])
 test('T7156', normal, compile, [''])
+test('T5591a', normal, compile, [''])
+test('T5591b', normal, compile, [''])
+
 
index e399195..f676c29 100644 (file)
@@ -17,7 +17,8 @@ data TEx where
   TEx :: a -> TEx 
 
 
-f (x::beta) = 
+
+f x = 
     let g1 :: forall b. b -> ()
         g1 _ = h [x]
         g2 z = case z of TEx y -> (h [[undefined]], op x [y])
@@ -27,7 +28,27 @@ f (x::beta) =
 {- This example comes from Note [Extra TcS Untouchables] in TcSimplify. It demonstrates 
    why when floating equalities out of an implication constraint we must record the free
    variables of the equalities as untouchables. With GHC 7.4.1 this program gives a Core
-   Lint error because of an existential escaping. -}
+   Lint error because of an existential escaping. 
+
+    assuming x:beta
+
+    forall b. F Int ~ [beta]                          (from g1)
+    forall a. F Int ~ [[alpha]], C beta [a]           (from g2)
+
+-}
+
 
 
    
+{- Assume x:beta
+   From g1 we get    (forall b.  F Int ~ [beta])
+   From g2 we get    (forall c. 0 => F Int ~ [[alpha]] /\ C beta [c])
+
+Floating we get
+   F Int ~ [beta], F Int ~ [[alpha]], alpha ~ alpha', forall c. C beta [c]
+=  { alpha := alpha' }
+=  beta ~ [alpha'], F Int ~ [[alpha']], forall c. C beta [c]
+=  { beta := [alpha']
+   F Int ~ [[alpha']], forall c. C [alpha'] [c]
+=  F Int ~ [[alpha']], forall c. (C [alpha'] [c], alpha' ~ c)
+-}
\ No newline at end of file
index c5d97ae..428d4b9 100644 (file)
@@ -1,11 +1,10 @@
 
-ExtraTcsUntch.hs:23:53:
+ExtraTcsUntch.hs:24:53:
     Could not deduce (C [t] [a]) arising from a use of `op'
-    from the context (beta ~ [t], F Int ~ [[t]])
+    from the context (F Int ~ [[t]])
       bound by the inferred type of
-               f :: (beta ~ [t], F Int ~ [[t]]) => beta -> ((), ((), ()))
-      at ExtraTcsUntch.hs:(20,1)-(24,29)
-    Possible fix: add an instance declaration for (C [t] [a])
+               f :: F Int ~ [[t]] => [t] -> ((), ((), ()))
+      at ExtraTcsUntch.hs:(21,1)-(25,29)
     In the expression: op x [y]
     In the expression: (h [[undefined]], op x [y])
     In a case alternative: TEx y -> (h [[undefined]], op x [y])
index a6010f6..9c5465f 100644 (file)
@@ -1,18 +1,21 @@
 
 GADTwrong1.hs:12:19:
-    Could not deduce (b ~ a1)
+    Could not deduce (a1 ~ b)
     from the context (() ~ Const a1)
       bound by a pattern with constructor
                  T :: forall a. a -> T (Const a),
                in a case alternative
       at GADTwrong1.hs:12:12-14
-      `b' is a rigid type variable bound by
-          the type signature for coerce :: a -> b at GADTwrong1.hs:10:20
       `a1' is a rigid type variable bound by
            a pattern with constructor
              T :: forall a. a -> T (Const a),
            in a case alternative
            at GADTwrong1.hs:12:12
+      `b' is a rigid type variable bound by
+          the type signature for coerce :: a -> b at GADTwrong1.hs:10:20
+    Relevant bindings include
+      coerce :: a -> b (bound at GADTwrong1.hs:11:1)
+      y :: a1 (bound at GADTwrong1.hs:12:14)
     In the expression: y
     In a case alternative: T y -> y
     In the expression: case T x :: T (Const b) of { T y -> y }
index 003c014..b8a45c3 100644 (file)
@@ -1,13 +1,16 @@
 
 NoMatchErr.hs:20:5:
-    Could not deduce (Memo d ~ Memo d0)
+    Could not deduce (Memo d0 ~ Memo d)
     from the context (Fun d)
       bound by the type signature for f :: Fun d => Memo d a -> Memo d a
       at NoMatchErr.hs:19:7-37
     NB: `Memo' is a type function, and may not be injective
     The type variable `d0' is ambiguous
     Possible fix: add a type signature that fixes these type variable(s)
-    Expected type: Memo d a -> Memo d a
-      Actual type: Memo d0 a -> Memo d0 a
+    Expected type: (d0 -> a) -> Memo d a
+      Actual type: (d0 -> a) -> Memo d0 a
+    Relevant bindings include
+      f :: Memo d a -> Memo d a (bound at NoMatchErr.hs:20:1)
+    In the first argument of `(.)', namely `abst'
     In the expression: abst . appl
     In an equation for `f': f = abst . appl
index 9466ee1..1410fca 100644 (file)
@@ -2,10 +2,11 @@
 SimpleFail16.hs:10:12:
     Couldn't match expected type `F ()' with actual type `p0 a0'
     The type variables `p0', `a0' are ambiguous
-    Possible cause: the monomorphism restriction applied to the following:
-      bar :: p0 a0 (bound at SimpleFail16.hs:10:1)
+    Possible cause: the monomorphism restriction applied to: `bar'
     Probable fix: give these definition(s) an explicit type signature
                   or use -XNoMonomorphismRestriction
+    Relevant bindings include
+      bar :: p0 a0 (bound at SimpleFail16.hs:10:1)
     In the first argument of `foo', namely `(undefined :: F ())'
     In the expression: foo (undefined :: F ())
     In an equation for `bar': bar = foo (undefined :: F ())
index 76afd8a..124eb79 100644 (file)
@@ -1,10 +1,12 @@
-\r
-SimpleFail5a.hs:31:11:\r
-    Couldn't match type `a' with `Int'\r
-      `a' is a rigid type variable bound by\r
-          the type signature for bar3wrong :: S3 a -> a\r
-          at SimpleFail5a.hs:30:14\r
-    Expected type: S3 a\r
-      Actual type: S3 Int\r
-    In the pattern: D3Int\r
-    In an equation for `bar3wrong': bar3wrong D3Int = 1\r
+
+SimpleFail5a.hs:31:11:
+    Couldn't match type `a' with `Int'
+      `a' is a rigid type variable bound by
+          the type signature for bar3wrong :: S3 a -> a
+          at SimpleFail5a.hs:30:14
+    Expected type: S3 a
+      Actual type: S3 Int
+    Relevant bindings include
+      bar3wrong :: S3 a -> a (bound at SimpleFail5a.hs:31:1)
+    In the pattern: D3Int
+    In an equation for `bar3wrong': bar3wrong D3Int = 1
index ff0667a..7311270 100644 (file)
@@ -1,15 +1,15 @@
-\r
-T1897b.hs:16:1:\r
-    Could not deduce (Depend a ~ Depend a0)\r
-    from the context (Bug a)\r
-      bound by the inferred type for `isValid':\r
-                 Bug a => [Depend a] -> Bool\r
-      at T1897b.hs:16:1-41\r
-    NB: `Depend' is a type function, and may not be injective\r
-    The type variable `a0' is ambiguous\r
-    Possible fix: add a type signature that fixes these type variable(s)\r
-    Expected type: [Depend a] -> Bool\r
-      Actual type: [Depend a0] -> Bool\r
-    When checking that `isValid'\r
-      has the inferred type `forall a. Bug a => [Depend a] -> Bool'\r
-    Probable cause: the inferred type is ambiguous\r
+
+T1897b.hs:16:1:
+    Could not deduce (Depend a0 ~ Depend a)
+    from the context (Bug a)
+      bound by the inferred type for `isValid':
+                 Bug a => [Depend a] -> Bool
+      at T1897b.hs:16:1-41
+    NB: `Depend' is a type function, and may not be injective
+    The type variable `a0' is ambiguous
+    Possible fix: add a type signature that fixes these type variable(s)
+    Expected type: [Depend a] -> Bool
+      Actual type: [Depend a0] -> Bool
+    When checking that `isValid'
+      has the inferred type `forall a. Bug a => [Depend a] -> Bool'
+    Probable cause: the inferred type is ambiguous
index d20a632..93b566d 100644 (file)
@@ -1,19 +1,21 @@
 
 T1900.hs:11:12:
     No instance for (Num ()) arising from a use of `+'
-    Possible fix: add an instance declaration for (Num ())
     In the expression: (+ 1)
     In an equation for `trans': trans = (+ 1)
     In the instance declaration for `Bug Int'
 
 T1900.hs:14:16:
-    Could not deduce (Depend s ~ Depend s0)
+    Could not deduce (Depend s0 ~ Depend s)
     from the context (Bug s)
       bound by the type signature for check :: Bug s => Depend s -> Bool
       at T1900.hs:13:10-36
     NB: `Depend' is a type function, and may not be injective
     The type variable `s0' is ambiguous
     Possible fix: add a type signature that fixes these type variable(s)
+    Relevant bindings include
+      check :: Depend s -> Bool (bound at T1900.hs:14:1)
+      d :: Depend s (bound at T1900.hs:14:7)
     In the return type of a call of `trans'
     In the second argument of `(==)', namely `trans d'
     In the expression: d == trans d
index 759ba2b..d360bfd 100644 (file)
@@ -17,7 +17,7 @@ T2239.hs:47:13:
 
 T2239.hs:50:13:
     Couldn't match type `forall b1. b1 ~ Bool => b1 -> b1'
-                  with `b -> b'
+                  with `Bool -> Bool'
     Expected type: (forall b. b ~ Bool => b -> b) -> b -> b
       Actual type: (forall b. b ~ Bool => b -> b)
                    -> forall b. b ~ Bool => b -> b
index b6bc222..bd81672 100644 (file)
@@ -1,13 +1,30 @@
 
-T2544.hs:15:12:
-    Could not deduce (IxMap r ~ IxMap i1)
+T2544.hs:15:18:
+    Could not deduce (IxMap i0 ~ IxMap l)
+    from the context (Ix l, Ix r)
+      bound by the instance declaration at T2544.hs:13:10-37
+    NB: `IxMap' is a type function, and may not be injective
+    The type variable `i0' is ambiguous
+    Possible fix: add a type signature that fixes these type variable(s)
+    Expected type: IxMap l [Int]
+      Actual type: IxMap i0 [Int]
+    Relevant bindings include
+      empty :: IxMap (l :|: r) [Int] (bound at T2544.hs:15:4)
+    In the first argument of `BiApp', namely `empty'
+    In the expression: BiApp empty empty
+    In an equation for `empty': empty = BiApp empty empty
+
+T2544.hs:15:24:
+    Could not deduce (IxMap i1 ~ IxMap r)
     from the context (Ix l, Ix r)
       bound by the instance declaration at T2544.hs:13:10-37
     NB: `IxMap' is a type function, and may not be injective
     The type variable `i1' is ambiguous
     Possible fix: add a type signature that fixes these type variable(s)
-    Expected type: IxMap (l :|: r) [Int]
-      Actual type: BiApp (IxMap i0) (IxMap i1) [Int]
-    In the return type of a call of `BiApp'
+    Expected type: IxMap r [Int]
+      Actual type: IxMap i1 [Int]
+    Relevant bindings include
+      empty :: IxMap (l :|: r) [Int] (bound at T2544.hs:15:4)
+    In the second argument of `BiApp', namely `empty'
     In the expression: BiApp empty empty
     In an equation for `empty': empty = BiApp empty empty
index 9d5504f..e18a8d2 100644 (file)
@@ -1,11 +1,12 @@
 
-T2627b.hs:20:14:
-    Couldn't match expected type `b0' with actual type `Dual (Dual b0)'
-      `b0' is untouchable
-           inside the constraints (b ~ W a2 b2)
-           bound at a pattern with constructor
-                      Wr :: forall a b. a -> Comm b -> Comm (W a b),
-                    in an equation for `conn'
-    In the pattern: Wr a r
+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
+    In the expression: conn undefined undefined
     In an equation for `conn':
         conn (Rd k) (Wr a r) = conn undefined undefined
index cfd248d..07b12e4 100644 (file)
@@ -7,13 +7,16 @@ T2664.hs:31:52:
       bound by the type signature for
                  newPChan :: ((a :*: b) ~ Dual c, c ~ Dual (a :*: b)) =>
                              IO (PChan (a :*: b), PChan c)
-      at T2664.hs:(23,5)-(31,87)
+      at T2664.hs:23:5-12
       `b' is a rigid type variable bound by
           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
+    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)
     In the third argument of `pchoose', namely `newPChan'
     In the first argument of `E', namely `(pchoose Right v newPChan)'
     In the expression:
index 4894b89..b873cf2 100644 (file)
@@ -1,16 +1,47 @@
-\r
-T2693.hs:10:7:\r
-    Couldn't match expected type `TFn a' with actual type `TFn a0'\r
-    NB: `TFn' is a type function, and may not be injective\r
-    The type variable `a0' is ambiguous\r
-    Possible fix: add a type signature that fixes these type variable(s)\r
-    When checking that `x' has the inferred type `forall a. TFn a'\r
-    Probable cause: the inferred type is ambiguous\r
-    In the expression:\r
-      do { let Just x = ...;\r
-           let n = fst x + fst x;\r
-           return () }\r
-    In an equation for `f':\r
-        f = do { let Just x = ...;\r
-                 let n = ...;\r
-                 return () }\r
+
+T2693.hs:10:7:
+    Couldn't match expected type `TFn a' with actual type `TFn a0'
+    NB: `TFn' is a type function, and may not be injective
+    The type variable `a0' is ambiguous
+    Possible fix: add a type signature that fixes these type variable(s)
+    When checking that `x' has the inferred type `forall a. TFn a'
+    Probable cause: the inferred type is ambiguous
+    In the expression:
+      do { let Just x = ...;
+           let n = fst x + fst x;
+           return () }
+    In an equation for `f':
+        f = do { let Just x = ...;
+                 let n = ...;
+                 return () }
+
+T2693.hs:18:15:
+    Couldn't match expected type `(a2, b0)' with actual type `TFn a3'
+    The type variables `a2', `b0', `a3' are ambiguous
+    Possible fix: add a type signature that fixes these type variable(s)
+    Relevant bindings include n :: a2 (bound at T2693.hs:18:7)
+    In the first argument of `fst', namely `x'
+    In the first argument of `(+)', namely `fst x'
+    In the expression: fst x + snd x
+
+T2693.hs:18:23:
+    Couldn't match expected type `(a4, a2)' with actual type `TFn a5'
+    The type variables `a2', `a4', `a5' are ambiguous
+    Possible fix: add a type signature that fixes these type variable(s)
+    Relevant bindings include n :: a2 (bound at T2693.hs:18:7)
+    In the first argument of `snd', namely `x'
+    In the second argument of `(+)', namely `snd x'
+    In the expression: fst x + snd x
+
+T2693.hs:28:20:
+    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 }
index 9f423e0..e44ab4d 100644 (file)
@@ -1,22 +1,48 @@
 
 T3330a.hs:19:34:
-    Couldn't match type `s' with `(->) (s0 ix1 -> ix1)'
+    Couldn't match type `ix'
+                  with `r ix1 -> Writer [AnyF ((->) (s0 ix0 -> ix1))] (r'0 ix1)'
+      `ix' is a rigid type variable bound by
+           the type signature for children :: s ix -> PF s r ix -> [AnyF s]
+           at T3330a.hs:18:13
+    Expected type: (s0 ix0 -> ix1)
+                   -> r ix1 -> Writer [AnyF s] (r'0 ix1)
+      Actual type: s ix
+    Relevant bindings include
+      children :: s ix -> PF s r ix -> [AnyF s] (bound at T3330a.hs:19:1)
+      p :: s ix (bound at T3330a.hs:19:10)
+      x :: PF s r ix (bound at T3330a.hs:19:12)
+    In the first argument of `hmapM', namely `p'
+    In the first argument of `execWriter', namely `(hmapM p collect x)'
+    In the expression: execWriter (hmapM p collect x)
+
+T3330a.hs:19:34:
+    Couldn't match type `s' with `(->) (s0 ix0 -> ix1)'
       `s' is a rigid type variable bound by
           the type signature for children :: s ix -> PF s r ix -> [AnyF s]
           at T3330a.hs:18:13
-    Expected type: (s0 ix0 -> ix1) -> r ix1 -> Writer [AnyF s] (r ix1)
+    Expected type: (s0 ix0 -> ix1)
+                   -> r ix1 -> Writer [AnyF s] (r'0 ix1)
       Actual type: s ix
+    Relevant bindings include
+      children :: s ix -> PF s r ix -> [AnyF s] (bound at T3330a.hs:19:1)
+      p :: s ix (bound at T3330a.hs:19:10)
+      x :: PF s r ix (bound at T3330a.hs:19:12)
     In the first argument of `hmapM', namely `p'
     In the first argument of `execWriter', namely `(hmapM p collect x)'
     In the expression: execWriter (hmapM p collect x)
 
 T3330a.hs:19:44:
-    Couldn't match type `ix' with `r ix0 -> Writer [AnyF s0] (r ix0)'
+    Couldn't match type `ix' with `r0 ix0 -> Writer [AnyF s0] (r0 ix0)'
       `ix' is a rigid type variable bound by
            the type signature for children :: s ix -> PF s r ix -> [AnyF s]
            at T3330a.hs:18:13
-    Expected type: PF s r (r ix0 -> Writer [AnyF s0] (r ix0))
+    Expected type: PF s r (r0 ix0 -> Writer [AnyF s0] (r0 ix0))
       Actual type: PF s r ix
+    Relevant bindings include
+      children :: s ix -> PF s r ix -> [AnyF s] (bound at T3330a.hs:19:1)
+      p :: s ix (bound at T3330a.hs:19:10)
+      x :: PF s r ix (bound at T3330a.hs:19:12)
     In the third argument of `hmapM', namely `x'
     In the first argument of `execWriter', namely `(hmapM p collect x)'
     In the expression: execWriter (hmapM p collect x)
index c9b6348..8c657c8 100644 (file)
@@ -1,10 +1,11 @@
 
 T3330c.hs:23:43:
     Couldn't match kind `*' with `* -> *'
-    Expected type: Der ((->) x) (f1 x)
-      Actual type: R f1
-    Kind incompatibility when matching types:
+    When matching types
       Der ((->) x) :: * -> *
       R :: (* -> *) -> *
+    Expected type: Der ((->) x) (f1 x)
+      Actual type: R f1
     In the first argument of `plug', namely `rf'
     In the first argument of `Inl', namely `(plug rf df x)'
+    In the expression: Inl (plug rf df x)
index ab7c5ed..b9f49fa 100644 (file)
@@ -1,19 +1,23 @@
-\r
-T3440.hs:11:22:\r
-    Could not deduce (a ~ a1)\r
-    from the context (Fam a ~ Fam a1)\r
-      bound by a pattern with constructor\r
-                 GADT :: forall a. a -> Fam a -> GADT (Fam a),\r
-               in an equation for `unwrap'\r
-      at T3440.hs:11:9-16\r
-      `a' is a rigid type variable bound by\r
-          the type signature for unwrap :: GADT (Fam a) -> (a, Fam a)\r
-          at T3440.hs:10:11\r
-      `a1' is a rigid type variable bound by\r
-           a pattern with constructor\r
-             GADT :: forall a. a -> Fam a -> GADT (Fam a),\r
-           in an equation for `unwrap'\r
-           at T3440.hs:11:9\r
-    In the expression: x\r
-    In the expression: (x, y)\r
-    In an equation for `unwrap': unwrap (GADT x y) = (x, y)\r
+
+T3440.hs:11:22:
+    Could not deduce (a1 ~ a)
+    from the context (Fam a ~ Fam a1)
+      bound by a pattern with constructor
+                 GADT :: forall a. a -> Fam a -> GADT (Fam a),
+               in an equation for `unwrap'
+      at T3440.hs:11:9-16
+      `a1' is a rigid type variable bound by
+           a pattern with constructor
+             GADT :: forall a. a -> Fam a -> GADT (Fam a),
+           in an equation for `unwrap'
+           at T3440.hs:11:9
+      `a' is a rigid type variable bound by
+          the type signature for unwrap :: GADT (Fam a) -> (a, Fam a)
+          at T3440.hs:10:11
+    Relevant bindings include
+      unwrap :: GADT (Fam a) -> (a, Fam a) (bound at T3440.hs:11:1)
+      x :: a1 (bound at T3440.hs:11:14)
+      y :: Fam a1 (bound at T3440.hs:11:16)
+    In the expression: x
+    In the expression: (x, y)
+    In an equation for `unwrap': unwrap (GADT x y) = (x, y)
index 4a16563..5a5ce08 100644 (file)
@@ -1,14 +1,15 @@
-\r
-T4093a.hs:8:8:\r
-    Could not deduce (e ~ ())\r
-    from the context (Foo e ~ Maybe e)\r
-      bound by the type signature for hang :: Foo e ~ Maybe e => Foo e\r
-      at T4093a.hs:7:9-34\r
-      `e' is a rigid type variable bound by\r
-          the type signature for hang :: Foo e ~ Maybe e => Foo e\r
-          at T4093a.hs:7:9\r
-    Expected type: Foo e\r
-      Actual type: Maybe ()\r
-    In the return type of a call of `Just'\r
-    In the expression: Just ()\r
-    In an equation for `hang': hang = Just ()\r
+
+T4093a.hs:8:8:
+    Could not deduce (e ~ ())
+    from the context (Foo e ~ Maybe e)
+      bound by the type signature for hang :: Foo e ~ Maybe e => Foo e
+      at T4093a.hs:7:9-34
+      `e' is a rigid type variable bound by
+          the type signature for hang :: Foo e ~ Maybe e => Foo e
+          at T4093a.hs:7:9
+    Expected type: Foo e
+      Actual type: Maybe ()
+    Relevant bindings include hang :: Foo e (bound at T4093a.hs:8:1)
+    In the return type of a call of `Just'
+    In the expression: Just ()
+    In an equation for `hang': hang = Just ()
index 948ba56..67f9b7d 100644 (file)
@@ -16,6 +16,15 @@ T4093b.hs:31:13:
           at T4093b.hs:20:12
     Expected type: EitherCO e (A C O n) (A O O n)
       Actual type: (MaybeC C (n C O), MaybeC O (n O C))
+    Relevant bindings include
+      blockToNodeList :: Block n e x -> A e x n (bound at T4093b.hs:25:1)
+      b :: Block n e x (bound at T4093b.hs:25:17)
+      l :: n O C
+           -> EitherCO e (A C O n) (A O O n) -> EitherCO e (A C C n) (A O C n)
+        (bound at T4093b.hs:34:5)
+      f :: n C O
+           -> EitherCO e (A C O n) (A O O n) -> EitherCO e (A C O n) (A O O n)
+        (bound at T4093b.hs:31:5)
     In the expression: (JustC n, NothingC)
     In an equation for `f': f n _ = (JustC n, NothingC)
     In an equation for `blockToNodeList':
index 3512e32..74410ec 100644 (file)
@@ -4,6 +4,9 @@ T4099.hs:11:14:
     NB: `T' is a type function, and may not be injective
     The type variable `a0' is ambiguous
     Possible fix: add a type signature that fixes these type variable(s)
+    Relevant bindings include
+      bar1 :: T b -> Int (bound at T4099.hs:11:1)
+      x :: T b (bound at T4099.hs:11:6)
     In the first argument of `foo', namely `x'
     In the expression: foo x
     In an equation for `bar1': bar1 x = foo x
@@ -12,6 +15,9 @@ T4099.hs:14:14:
     Couldn't match expected type `T a1' with actual type `Maybe b'
     The type variable `a1' is ambiguous
     Possible fix: add a type signature that fixes these type variable(s)
+    Relevant bindings include
+      bar2 :: Maybe b -> Int (bound at T4099.hs:14:1)
+      x :: Maybe b (bound at T4099.hs:14:6)
     In the first argument of `foo', namely `x'
     In the expression: foo x
     In an equation for `bar2': bar2 x = foo x
index 45fbdaf..7236a50 100644 (file)
@@ -13,6 +13,9 @@ T4179.hs:26:16:
       Actual type: x (A2 (FCon x) -> A3 (FCon x))
                    -> A2 (x (A2 (FCon x) -> A3 (FCon x)))
                    -> A3 (x (A2 (FCon x) -> A3 (FCon x)))
+    Relevant bindings include
+      fCon :: Con x -> A2 (FCon x) -> A3 (FCon x)
+        (bound at T4179.hs:26:1)
     In the first argument of `foldDoC', namely `op'
     In the expression: foldDoC op
     In an equation for `fCon': fCon = foldDoC op
index 01f0126..a4e9525 100644 (file)
@@ -10,6 +10,9 @@ T4272.hs:15:26:
           at T4272.hs:14:16
     Expected type: TermFamily a (TermFamily a a)
       Actual type: TermFamily a a
+    Relevant bindings include
+      laws :: TermFamily a a -> b (bound at T4272.hs:15:1)
+      t :: TermFamily a a (bound at T4272.hs:15:6)
     In the first argument of `terms', namely
       `(undefined :: TermFamily a a)'
     In the second argument of `prune', namely
index 4d8742c..81453a0 100644 (file)
@@ -1,9 +1,18 @@
 
 T5439.hs:83:28:
-    Couldn't match type `Attempt (WaitOpResult (WaitOps rs))'
-                  with `Attempt (HNth n0 l0) -> Attempt (HElemOf l0)'
+    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)))
+    Relevant bindings include
+      registerWaitOp :: WaitOps rs
+                        -> f (Attempt (WaitOpResult (WaitOps rs))) -> IO Bool
+        (bound at T5439.hs:62:3)
+      ops :: WaitOps rs (bound at T5439.hs:62:18)
+      ev :: f (Attempt (WaitOpResult (WaitOps rs)))
+        (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 a stmt of a 'do' block:
index 4ec24d3..bb32907 100644 (file)
@@ -2,7 +2,5 @@
 T5934.hs:10:7:
     No instance for (Num ((forall s. GenST s) -> Int))
       arising from the literal `0'
-    Possible fix:
-      add an instance declaration for (Num ((forall s. GenST s) -> Int))
     In the expression: 0
     In an equation for `run': run = 0
index c389866..0a82222 100644 (file)
@@ -2,9 +2,10 @@
 T6123.hs:10:14:
     Couldn't match expected type `a0' with actual type `Id a0'
     The type variable `a0' is ambiguous
-    Possible cause: the monomorphism restriction applied to the following:
-      cundefined :: a0 (bound at T6123.hs:10:1)
+    Possible cause: the monomorphism restriction applied to:
+      `cundefined'
     Probable fix: give these definition(s) an explicit type signature
                   or use -XNoMonomorphismRestriction
+    Relevant bindings include cundefined :: a0 (bound at T6123.hs:10:1)
     In the expression: cid undefined
     In an equation for `cundefined': cundefined = cid undefined
index cb32014..1d3d627 100644 (file)
@@ -1,44 +1,55 @@
-{-# LANGUAGE TypeFamilies #-}\r
-\r
-module T7010 where\r
-\r
-type Vector = Serial Float\r
-data Serial v = Serial\r
-\r
-class MakeValueTuple a where\r
-   type ValueTuple a :: *\r
-\r
-instance MakeValueTuple Float where\r
-   type ValueTuple Float = IO Float\r
-\r
-instance (MakeValueTuple v) => MakeValueTuple (Serial v) where\r
-   type ValueTuple (Serial v) = Serial (ValueTuple v)\r
-\r
-\r
-stereoFromMono :: (v, v)\r
-stereoFromMono = undefined\r
-\r
-processIO ::\r
-   (MakeValueTuple a) =>\r
-   (ValueTuple a, ValueTuple a) ->\r
-   (a, a)\r
-processIO = undefined\r
-\r
-\r
-phoneme :: (Vector, Vector)\r
-phoneme = processIO stereoFromMono\r
-\r
-\r
-withArgs ::\r
-   (MakeValueTuple b) =>\r
-   (a, ValueTuple b) ->\r
-   (a, b)\r
-withArgs = undefined\r
-\r
-plug ::\r
-   (MakeValueTuple b) =>\r
-   (b, ValueTuple b)\r
-plug = undefined\r
-\r
-filterFormants :: (Float, Vector)\r
-filterFormants = withArgs plug\r
+{-# LANGUAGE TypeFamilies #-}
+
+module T7010 where
+
+type Vector = Serial Float
+data Serial v = Serial
+
+class MakeValueTuple a where
+   type ValueTuple a :: *
+
+instance MakeValueTuple Float where
+   type ValueTuple Float = IO Float
+
+instance (MakeValueTuple v) => MakeValueTuple (Serial v) where
+   type ValueTuple (Serial v) = Serial (ValueTuple v)
+
+
+stereoFromMono :: (v, v)
+stereoFromMono = undefined
+
+processIO ::
+   (MakeValueTuple a) =>
+   (ValueTuple a, ValueTuple a) ->
+   (a, a)
+processIO = undefined
+
+
+phoneme :: (Vector, Vector)
+phoneme = processIO stereoFromMono
+
+
+withArgs ::
+   (MakeValueTuple b) =>
+   (a, ValueTuple b) ->
+   (a, b)
+withArgs = undefined
+
+plug ::
+   (MakeValueTuple c) =>
+   (c, ValueTuple c)
+plug = undefined
+
+filterFormants :: (Float, Vector)
+filterFormants = withArgs plug
+
+{- Call to withArgs generates
+
+    (MakeValueTuple Vector, (c,ValueTuple c)~(Float,ValueTuple Vector), MakeValueTuple c)
+=   (MakeValueTuple (Serial Float), ValueTuple Float ~ ValueTuple (Serial Float), MakeValueTuple Float)
+=   (MakeValueTuple (Serial Float), MakeValueTuple Float,
+     IO Float ~ Serial (ValueTuple Float))
+
+     IO Float ~ Serial f, ValueTuple Float ~ f
+=    IO Float ~ Serial f, IO Float ~ f
+-}
index 25194a7..6f620c7 100644 (file)
@@ -1,8 +1,8 @@
-\r
-T7010.hs:44:27:\r
-    Couldn't match type `Serial (ValueTuple Float)' with `IO Float'\r
-    Expected type: (Float, ValueTuple Vector)\r
-      Actual type: (Float, ValueTuple Float)\r
-    In the first argument of `withArgs', namely `plug'\r
-    In the expression: withArgs plug\r
-    In an equation for `filterFormants': filterFormants = withArgs plug\r
+
+T7010.hs:44:27:
+    Couldn't match type `Serial (IO Float)' with `IO Float'
+    Expected type: (Float, ValueTuple Vector)
+      Actual type: (Float, ValueTuple Float)
+    In the first argument of `withArgs', namely `plug'
+    In the expression: withArgs plug
+    In an equation for `filterFormants': filterFormants = withArgs plug
index e20d82a..67929e5 100644 (file)
@@ -1,8 +1,6 @@
-\r
-mdofail001.hs:10:32:\r
-    No instance for (Num Char)\r
-      arising from the literal `1'\r
-    Possible fix: add an instance declaration for (Num Char)\r
-    In the expression: 1\r
-    In the first argument of `l', namely `[1, 2, 3]'\r
-    In the expression: l [1, 2, 3]\r
+
+mdofail001.hs:10:32:
+    No instance for (Num Char) arising from the literal `1'
+    In the expression: 1
+    In the first argument of `l', namely `[1, 2, 3]'
+    In the expression: l [1, 2, 3]
index 603d0d6..c4c8203 100644 (file)
@@ -2,5 +2,4 @@
 mod46.hs:4:10:
     No instance for (Eq T)
       arising from the superclasses of an instance declaration
-    Possible fix: add an instance declaration for (Eq T)
     In the instance declaration for `Ord T'
index 8b41e7f..2670b53 100644 (file)
@@ -3,7 +3,6 @@ mod54.hs:3:22:
     No instance for (Eq T)
       arising from the 'deriving' clause of a data type declaration
     Possible fix:
-      add an instance declaration for (Eq T)
-      or use a standalone 'deriving instance' declaration,
-           so you can specify the instance context yourself
+      use a standalone 'deriving instance' declaration,
+        so you can specify the instance context yourself
     When deriving the instance for (Ord T)
index fe8ce00..ae3518e 100644 (file)
@@ -1,7 +1,11 @@
 
 readFail003.hs:4:27:
     Occurs check: cannot construct the infinite type:
-      t0 = (t0, [a0], [a1])
+      t ~ (t, [a], [a1])
+    Relevant bindings include
+      c :: [a1] (bound at readFail003.hs:4:7)
+      b :: [a] (bound at readFail003.hs:4:5)
+      a :: t (bound at readFail003.hs:4:3)
     In the expression: a
     In a pattern binding:
       ~(a, b, c)
@@ -13,7 +17,11 @@ readFail003.hs:4:27:
 
 readFail003.hs:5:27:
     Occurs check: cannot construct the infinite type:
-      t0 = (t0, [a0], [a1])
+      t ~ (t, [a], [a1])
+    Relevant bindings include
+      c :: [a1] (bound at readFail003.hs:4:7)
+      b :: [a] (bound at readFail003.hs:4:5)
+      a :: t (bound at readFail003.hs:4:3)
     In the expression: a
     In a pattern binding:
       ~(a, b, c)
@@ -25,7 +33,11 @@ readFail003.hs:5:27:
 
 readFail003.hs:6:27:
     Occurs check: cannot construct the infinite type:
-      t0 = (t0, [a0], [a1])
+      t ~ (t, [a], [a1])
+    Relevant bindings include
+      c :: [a1] (bound at readFail003.hs:4:7)
+      b :: [a] (bound at readFail003.hs:4:5)
+      a :: t (bound at readFail003.hs:4:3)
     In the expression: a
     In a pattern binding:
       ~(a, b, c)
index a2dc516..28f3113 100644 (file)
@@ -13,10 +13,12 @@ test('T1969',
                              #                 15 (x86/OS X)
                              #                 19 (x86/OS X)
       if_wordsize(64,
-          compiler_stats_num_field('peak_megabytes_allocated', 24,
-                                                               37)),
+          compiler_stats_num_field('peak_megabytes_allocated', 22,
+                                                               28)),
                                              # expected value: 28 (amd64/Linux)
                                              # expected value: 34 (amd64/Linux)
+                                             # 2012-09-20      23 (amd64/Linux)
+                                             # 2012-10-03      25 (amd64/Linux if .hi exists)
       if_wordsize(32,
           compiler_stats_num_field('max_bytes_used', 4000000,
                                                      7000000)),
@@ -36,7 +38,7 @@ test('T1969',
                                     #                 221667908 (x86/OS X)
                                     #                 274932264 (x86/Linux)
       if_wordsize(64,
-          compiler_stats_range_field('bytes allocated', 633332520, 1)),
+          compiler_stats_range_field('bytes allocated', 641959976, 1)),
                                     # 17/11/2009:     434,845,560 (amd64/Linux)
                                     # 08/12/2009:     459,776,680 (amd64/Linux)
                                     # 17/05/2010:     519,377,728 (amd64/Linux)
@@ -45,7 +47,8 @@ test('T1969',
                                     # 20/07/2012:     595,936,240 (amd64/Linux)
                                     # 23/08/2012:     606,230,880 (amd64/Linux)
                                     # 29/08/2012:     633,334,184 (amd64/Linux)
-                                    #                 (new codegen)
+                                    #                 (^ new codegen)
+                                    # 18/09/2012:     641,959,976 (amd64/Linux)
       only_ways(['normal']),
       extra_hc_opts('-dcore-lint')
           # Leave -dcore-lint on for this one test, so that we have something
@@ -82,10 +85,11 @@ test('T3294',
                                                       750000000)),
                                     # expected value: 815479800  (x86/Linux)
       if_wordsize(64,
-          compiler_stats_range_field('bytes allocated', 2961778696, 5)),
+          compiler_stats_range_field('bytes allocated', 2717327208, 5)),
                                    # old:        1,357,587,088 (amd64/Linux)
                                    # 29/08/2012: 2,961,778,696 (amd64/Linux)
-                                   #   (increase due to new codegen, see #7198)
+                                   # (^ increase due to new codegen, see #7198)
+                                   # 18/09/2012: 2,717,327,208 (amd64/Linux)
       conf_3294
       ],
      compile,
@@ -160,14 +164,12 @@ test('T4007',
      ['$MAKE -s --no-print-directory T4007'])
 
 test('T5030',
-     [expect_broken(5030),
-      # expected value: 449368924 (x86/Linux)
+     [# expected value: 449368924 (x86/Linux)
       if_wordsize(32,
           compiler_stats_range_field('bytes allocated', 196457520, 10)),
       # expected value: 346750856 (amd64/Linux):
       if_wordsize(64,
-          compiler_stats_num_field('bytes allocated', 300000000,
-                                                      400000000)),
+          compiler_stats_range_field('bytes allocated', 530000000, 10)),
        only_ways(['normal'])
       ],
      compile,
@@ -216,7 +218,7 @@ test('T5321Fun',
      [ only_ways(['normal']),  # no optimisation for this one
       # sample from x86/Linux
       if_wordsize(32,
-          compiler_stats_range_field('bytes allocated', 296657384, 10)),
+          compiler_stats_range_field('bytes allocated', 300000000, 10)),
       if_wordsize(64,
           compiler_stats_range_field('bytes allocated', 713385808, 10))
                                          # prev:       585,521,080
@@ -241,9 +243,9 @@ test('T5321FD',
 test('T5642',
      [ only_ways(['normal']),
       if_wordsize(32, # sample from x86/Linux
-          compiler_stats_range_field('bytes allocated', 1682508520, 10)),
+          compiler_stats_range_field('bytes allocated',  650000000, 10)),
       if_wordsize(64,
-          compiler_stats_range_field('bytes allocated', 3361296144, 10))
+          compiler_stats_range_field('bytes allocated', 1300000000, 10))
       ],
       compile,['-O'])
 
@@ -254,7 +256,9 @@ test('T5837',
 
       # sample: 3926235424 (amd64/Linux, 15/2/2012)
       if_wordsize(64,
-          compiler_stats_range_field('bytes allocated', 79110184, 10))
+          compiler_stats_range_field('bytes allocated', 81879216, 10))
+                                          # 2012-10-02 81879216
+                                           # 2012-09-20 87254264 amd64/Linux
       ],
       compile_fail,['-fcontext-stack=50'])
 
@@ -264,6 +268,7 @@ test('T6048',
           compiler_stats_range_field('bytes allocated', 38000000, 10)),
 
       if_wordsize(64,
-          compiler_stats_range_field('bytes allocated', 67328320, 10))
+          compiler_stats_range_field('bytes allocated', 97247032, 10))
+                                           # 18/09/2012 97247032 amd64/Linux
       ],
       compile,[''])
index d6bf1bc..fdf5f29 100644 (file)
@@ -2,23 +2,26 @@
 test('haddock.base',
      [unless_in_tree_compiler(skip)
      ,if_wordsize(64,
-          stats_num_field('peak_megabytes_allocated', 239,
-                                                      241))
+          stats_num_field('peak_megabytes_allocated', 236,
+                                                      248))
                                         # 2012-08-14: 240 (amd64/Linux)
+                                        # 2012-09-18: 237 (amd64/Linux)
      ,if_wordsize(32,
           stats_num_field('peak_megabytes_allocated', 142,
                                                       143))
                                         # 2012-08-14: 144 (x86/OSX)
      ,if_wordsize(64,
-          stats_range_field('max_bytes_used', 87374568, 2))
+          stats_range_field('max_bytes_used', 84794136, 2))
                                 # 2012-08-14: 87374568 (amd64/Linux)
                                 # 2012-08-21: 86428216 (amd64/Linux)
+                                # 2012-09-20: 84794136 (amd64/Linux)
      ,if_wordsize(32,
           stats_range_field('max_bytes_used', 45574928, 1))
                                 # 2012-08-14: 45574928 (x86/OSX)
      ,if_wordsize(64,
-          stats_range_field('bytes allocated', 5920822352, 1))
+          stats_range_field('bytes allocated', 5829972376, 1))
                                  # 2012-08-14: 5920822352 (amd64/Linux)
+                                 # 2012-09-20: 5829972376 (amd64/Linux)
      ,if_wordsize(32,
           stats_range_field('bytes allocated', 3046487920, 1))
                                  # 2012-08-14: 3046487920 (x86/OSX)
@@ -29,18 +32,20 @@ test('haddock.base',
 test('haddock.Cabal',
      [unless_in_tree_compiler(skip)
      ,if_wordsize(64,
-          stats_num_field('peak_megabytes_allocated', 209,
-                                                      213))
+          stats_num_field('peak_megabytes_allocated', 225,
+                                                      229))
                              # 2012-08-14: 202 (amd64/Linux)
                              # 2012-08-29: 211 (amd64/Linux, new codegen)
+                             # 2012-09-20: 227 (amd64/Linux, new codegen)
      ,if_wordsize(32,
           stats_num_field('peak_megabytes_allocated', 115,
                                                       117))
                                         # 2012-08-14: 116 (x86/OSX)
      ,if_wordsize(64,
-          stats_range_field('max_bytes_used', 77992512, 1))
+          stats_range_field('max_bytes_used', 91341568, 2))
                              # 2012-08-14: 74119424 (amd64/Linux)
                              # 2012-08-29: 77992512 (amd64/Linux, new codegen)
+                             # 2012-10-02: 91341568 (amd64/Linux)
      ,if_wordsize(32,
           stats_range_field('max_bytes_used', 47461532, 1))
                              # 2012-08-14: 47461532 (x86/OSX)
@@ -58,24 +63,27 @@ test('haddock.Cabal',
 test('haddock.compiler',
      [unless_in_tree_compiler(skip)
      ,if_wordsize(64,
-          stats_num_field('peak_megabytes_allocated', 1198,
-                                                      1204))
+          stats_num_field('peak_megabytes_allocated', 1226,
+                                                      1230))
                                         # 2012-08-14: 1203 (amd64/Linux)
                                         # 2012-08-21: 1199 (amd64/Linux)
+                                        # 2012-09-20: 1228 (amd64/Linux)
      ,if_wordsize(32,
           stats_num_field('peak_megabytes_allocated', 630,
                                                       632))
                                         # 2012-08-14: 631 (x86/OSX)
      ,if_wordsize(64,
-          stats_range_field('max_bytes_used', 428775544, 1))
+          stats_range_field('max_bytes_used', 437618008, 1))
                                 # 2012-08-14: 428775544 (amd64/Linux)
+                                # 2012-09-20: 437618008 (amd64/Linux)
      ,if_wordsize(32,
           stats_range_field('max_bytes_used', 231064920, 1))
                                 # 2012-08-14: 231064920 (x86/OSX)
      ,if_wordsize(64,
-          stats_range_field('bytes allocated', 26353100288, 1))
+          stats_range_field('bytes allocated', 26882813032, 1))
                               # 2012-08-14: 26,070,600,504 (amd64/Linux)
                               # 2012-08-29: 26,353,100,288 (amd64/Linux, new CG)
+                              # 2012-09-18: 26,882,813,032 (amd64/Linux)
      ,if_wordsize(32,
           stats_range_field('bytes allocated', 13471797488, 1))
                                  # 2012-08-14: 13471797488 (x86/OSX)
diff --git a/testsuite/tests/perf/should_run/T7257.hs b/testsuite/tests/perf/should_run/T7257.hs
new file mode 100644 (file)
index 0000000..ef65db3
--- /dev/null
@@ -0,0 +1,30 @@
+{-# LANGUAGE BangPatterns #-}
+module Main where
+
+import qualified Data.ByteString as S
+import Data.IORef
+import Control.Monad
+
+makeBs :: Int -> S.ByteString
+makeBs n = S.replicate n (fromIntegral n)
+
+doStuff :: IORef [S.ByteString] -> Int -> IO ()
+doStuff ref n = do
+    let !bs = makeBs n
+    modifyIORef ref (bs:)
+{-# NOINLINE doStuff #-}
+
+undo :: IORef [S.ByteString] -> IO ()
+undo ref = do
+    h <- atomicModifyIORef ref (\(x:xs) -> (xs,x))
+    S.length h `seq` return ()
+
+main = do
+    ref <- newIORef [S.empty]
+    let fn n = do
+        doStuff ref n
+        when (rem 5 n /= 0 ) $ undo ref
+        
+    mapM_ fn (take 5000000 $ cycle [1..100])
+    var <- readIORef ref
+    print $ length var
diff --git a/testsuite/tests/perf/should_run/T7257.stdout b/testsuite/tests/perf/should_run/T7257.stdout
new file mode 100644 (file)
index 0000000..26aece7
--- /dev/null
@@ -0,0 +1 @@
+100001
index c7582d6..22acf28 100644 (file)
@@ -237,3 +237,20 @@ test('T5536',
     compile_and_run,
     ['-O'])
 
+test('T7257',
+     [if_wordsize(32,
+          stats_range_field('bytes allocated', 1150000000, 10)),
+                           # expected value: 1246287228 (i386/Linux)
+      if_wordsize(32,
+          stats_range_field('peak_megabytes_allocated', 150, 5)),
+                           # unkonwn
+      if_wordsize(64,
+          stats_range_field('bytes allocated', 1774893760, 5)),
+                           # 2012-09-21: 1774893760 (amd64/Linux)
+      if_wordsize(64,
+          stats_range_field('peak_megabytes_allocated', 227, 5)),
+                           # 2012-09-21: 227 (amd64/Linux)
+
+      only_ways(['normal'])
+     ],
+    compile_and_run, ['-O'])
index 9b190ce..bc034d3 100644 (file)
@@ -2,7 +2,6 @@
 T6054.hs:7:14:
     No instance for (Bar () '() a0)
       arising from an expression type signature
-    Possible fix: add an instance declaration for (Bar () '() a0)
     In the first argument of `print', namely
       `(Proxy :: Bar () a => Proxy a)'
     In the expression: print (Proxy :: Bar () a => Proxy a)
diff --git a/testsuite/tests/polykinds/T7224.hs b/testsuite/tests/polykinds/T7224.hs
new file mode 100644 (file)
index 0000000..a065bc8
--- /dev/null
@@ -0,0 +1,7 @@
+{-# LANGUAGE PolyKinds #-}
+
+module T7224 where
+
+class PMonad' (m :: i -> i -> * -> *) where
+  ret'  :: a -> m i i a
+  bind' :: m i j a -> (a -> m j k b) -> m i k b
diff --git a/testsuite/tests/polykinds/T7224.stderr b/testsuite/tests/polykinds/T7224.stderr
new file mode 100644 (file)
index 0000000..c1508e9
--- /dev/null
@@ -0,0 +1,5 @@
+
+T7224.hs:6:19:
+    Kind variable `i' used as a type
+    In the type `a -> m i i a'
+    In the class declaration for PMonad'
diff --git a/testsuite/tests/polykinds/T7230.hs b/testsuite/tests/polykinds/T7230.hs
new file mode 100644 (file)
index 0000000..d3c6a51
--- /dev/null
@@ -0,0 +1,49 @@
+{-# OPTIONS_GHC -fwarn-incomplete-patterns #-}
+{-# LANGUAGE DataKinds, PolyKinds, GADTs, TypeFamilies #-}
+{-# LANGUAGE TypeOperators, UndecidableInstances #-}
+module T7230 where
+
+data Nat = Zero | Succ Nat deriving (Show, Eq, Ord)
+
+data family Sing (x :: k)
+
+data instance Sing (n :: Nat) where
+  SZero :: Sing Zero
+  SSucc :: Sing n -> Sing (Succ n)
+
+type SNat (n :: Nat) = Sing n
+
+data instance Sing (b :: Bool) where
+  STrue  :: Sing True
+  SFalse :: Sing False
+
+type SBool (b :: Bool) = Sing b
+
+data instance Sing (xs :: [k]) where
+  SNil  :: Sing ('[] :: [k])
+  SCons :: Sing x -> Sing xs -> Sing (x ': xs)
+
+type SList (xs :: [k]) = Sing (xs :: [k])
+
+type family (:<<=) (n :: Nat) (m :: Nat) :: Bool
+type instance Zero   :<<= n      = True
+type instance Succ n :<<= Zero   = False
+type instance Succ n :<<= Succ m = n :<<= m
+
+(%:<<=) :: SNat n -> SNat m -> SBool (n :<<= m)
+SZero   %:<<= _       = STrue
+SSucc _ %:<<= SZero   = SFalse
+SSucc n %:<<= SSucc m = n %:<<= m
+
+type family   (b :: Bool) :&& (b' :: Bool) :: Bool
+type instance True  :&& b = b
+type instance False :&& b = False
+
+type family   Increasing (xs :: [Nat]) :: Bool
+type instance Increasing '[]  = True
+type instance Increasing '[n] = True
+type instance Increasing (n ': m ': ns) = n :<<= m :&& Increasing (m ': ns)
+
+crash :: (Increasing xs) ~ True => SList xs -> SBool (Increasing xs)
+crash (SCons x (SCons y xs)) = x %:<<= y
+crash _                      = STrue
diff --git a/testsuite/tests/polykinds/T7230.stderr b/testsuite/tests/polykinds/T7230.stderr
new file mode 100644 (file)
index 0000000..3bcccee
--- /dev/null
@@ -0,0 +1,28 @@
+
+T7230.hs:48:32:
+    Could not deduce ((x :<<= x1) ~ 'True)
+    from the context (Increasing xs ~ 'True)
+      bound by the type signature for
+                 crash :: Increasing xs ~ 'True =>
+                          SList Nat xs -> SBool (Increasing xs)
+      at T7230.hs:47:10-68
+    or from (xs ~ (':) Nat x xs1)
+      bound by a pattern with constructor
+                 SCons :: forall (k :: BOX) (x :: k) (xs :: [k]).
+                          Sing k x -> Sing [k] xs -> Sing [k] ((':) k x xs),
+               in an equation for `crash'
+      at T7230.hs:48:8-27
+    or from (xs1 ~ (':) Nat x1 xs2)
+      bound by a pattern with constructor
+                 SCons :: forall (k :: BOX) (x :: k) (xs :: [k]).
+                          Sing k x -> Sing [k] xs -> Sing [k] ((':) k x xs),
+               in an equation for `crash'
+      at T7230.hs:48:17-26
+    Expected type: SBool (Increasing xs)
+      Actual type: SBool (x :<<= x1)
+    Relevant bindings include
+      x :: Sing Nat x (bound at T7230.hs:48:14)
+      y :: Sing Nat x1 (bound at T7230.hs:48:23)
+    In the expression: x %:<<= y
+    In an equation for `crash':
+        crash (SCons x (SCons y xs)) = x %:<<= y
diff --git a/testsuite/tests/polykinds/T7238.hs b/testsuite/tests/polykinds/T7238.hs
new file mode 100644 (file)
index 0000000..3639a8e
--- /dev/null
@@ -0,0 +1,14 @@
+{-# LANGUAGE ConstraintKinds, TypeFamilies #-}
+module T7238 where
+
+import GHC.Exts
+
+class Pair p where
+       type Ctxt p a :: Constraint
+       l :: Ctxt p a => p a -> a
+
+data Unit a = Unit
+
+instance Pair Unit where
+       type Ctxt Unit a = a ~ ()
+       l _ = ()
\ No newline at end of file
diff --git a/testsuite/tests/polykinds/T7278.hs b/testsuite/tests/polykinds/T7278.hs
new file mode 100644 (file)
index 0000000..d43e60c
--- /dev/null
@@ -0,0 +1,9 @@
+{-# LANGUAGE TypeFamilies, PolyKinds, MultiParamTypeClasses #-}
+module T7278 where
+type family TF (t  :: k) :: * -> * -> *
+
+class C (t :: k) (dcs :: * -> * -> *)
+
+f :: (C (t :: k) (TF t)) => TF t p1 p0 -> t p1 p0
+f = undefined -- panic caused by (t :: k) in the signature's context
diff --git a/testsuite/tests/polykinds/T7278.stderr b/testsuite/tests/polykinds/T7278.stderr
new file mode 100644 (file)
index 0000000..96f8dd7
--- /dev/null
@@ -0,0 +1,5 @@
+
+T7278.hs:8:43:
+    `t' is applied to too many type arguments
+    In the type signature for `f':
+      f :: C (t :: k) (TF t) => TF t p1 p0 -> t p1 p0
index 28be8d9..7e50bb5 100644 (file)
@@ -63,8 +63,12 @@ test('T7128', normal, compile,[''])
 test('T7151', normal, compile_fail,[''])
 test('T7095', normal, compile,[''])
 test('T7090', normal, compile,[''])
-test('T7176', expect_broken(7176), compile,[''])
 test('T7272',
      extra_clean(['T7272a.hi', 'T7272a.o']),
      multimod_compile,
      ['T7272.hs', '-v0'])
+test('T7176', normal, compile,[''])
+test('T7224', normal, compile_fail,[''])
+test('T7230', normal, compile_fail,[''])
+test('T7238', normal, compile,[''])
+test('T7278', normal, compile_fail,[''])
index f380db4..5130968 100644 (file)
@@ -4,11 +4,14 @@ rebindable6.hs:106:17:
       arising from a do statement
     The type variable `t0' is ambiguous
     Possible fix: add a type signature that fixes these type variable(s)
+    Relevant bindings include
+      test_do :: IO a -> IO (Maybe b) -> IO b
+        (bound at rebindable6.hs:104:9)
+      f :: IO a (bound at rebindable6.hs:104:17)
+      g :: IO (Maybe b) (bound at rebindable6.hs:104:19)
     Note: there is a potential instance available:
       instance HasSeq (IO a -> IO b -> IO b)
         -- Defined at rebindable6.hs:52:18
-    Possible fix:
-      add an instance declaration for (HasSeq (IO a -> t0 -> IO b))
     In a stmt of a 'do' block: f
     In the expression:
       do { f;
@@ -25,12 +28,13 @@ rebindable6.hs:107:17:
       arising from a do statement
     The type variables `t0', `t1' are ambiguous
     Possible fix: add a type signature that fixes these type variable(s)
+    Relevant bindings include
+      test_do :: IO a -> IO (Maybe b) -> IO b
+        (bound at rebindable6.hs:104:9)
+      g :: IO (Maybe b) (bound at rebindable6.hs:104:19)
     Note: there is a potential instance available:
       instance HasBind (IO a -> (a -> IO b) -> IO b)
         -- Defined at rebindable6.hs:47:18
-    Possible fix:
-      add an instance declaration for
-      (HasBind (IO (Maybe b) -> (Maybe b -> t1) -> t0))
     In a stmt of a 'do' block: Just (b :: b) <- g
     In the expression:
       do { f;
@@ -47,9 +51,13 @@ rebindable6.hs:108:17:
       arising from a use of `return'
     The type variable `t1' is ambiguous
     Possible fix: add a type signature that fixes these type variable(s)
+    Relevant bindings include
+      test_do :: IO a -> IO (Maybe b) -> IO b
+        (bound at rebindable6.hs:104:9)
+      g :: IO (Maybe b) (bound at rebindable6.hs:104:19)
+      b :: b (bound at rebindable6.hs:107:23)
     Note: there is a potential instance available:
       instance HasReturn (a -> IO a) -- Defined at rebindable6.hs:42:18
-    Possible fix: add an instance declaration for (HasReturn (b -> t1))
     In a stmt of a 'do' block: return b
     In the expression:
       do { f;
index 9eacfc0..4eb19d6 100644 (file)
@@ -1,8 +1,4 @@
 
-rn050.hs:10:3: Warning:
-    In the use of `op' (imported from Rn050_A):
-    Deprecated: "Use bop instead"
-
 rn050.hs:13:7: Warning:
     In the use of `op' (imported from Rn050_A):
     Deprecated: "Use bop instead"
index 74afb9f..3d38aa9 100644 (file)
@@ -1,8 +1,4 @@
 
-rn066.hs:10:3: Warning:
-    In the use of `op' (imported from Rn066_A):
-    "Is that really a good idea?"
-
 rn066.hs:13:7: Warning:
     In the use of `op' (imported from Rn066_A):
     "Is that really a good idea?"
diff --git a/testsuite/tests/rts/T7227.hs b/testsuite/tests/rts/T7227.hs
new file mode 100644 (file)
index 0000000..b3549c2
--- /dev/null
@@ -0,0 +1 @@
+main = return ()
index 25a3de2..d69d211 100644 (file)
@@ -158,3 +158,7 @@ test('T7040_ghci', [ only_ways(['ghci']),
                       cmd_prefix('$MAKE T7040_ghci_setup && '),
                       extra_clean(['T7040_ghci_c.o']) ],
                     compile_and_run, ['T7040_ghci_c.o'])
+
+test('T7227', [ extra_run_opts('+RTS -tT7227.stat --machine-readable -RTS'),
+                extra_clean(['T7227.stat']) ]
+            , compile_and_run, [''] )
index 30c2447..bc1069c 100644 (file)
@@ -4,7 +4,6 @@
 
 <interactive>:22:22:
     No instance for (Typeable G) arising from a use of `cast'
-    Possible fix: add an instance declaration for (Typeable G)
     In the expression: (cast y) :: Maybe H
     In a pattern binding: (Just y_as_H) = (cast y) :: Maybe H
 
index 0fd629d..dbc7b0c 100644 (file)
@@ -1,30 +1,30 @@
-\r
-==================== FloatOut stats: ====================\r
-1 Lets floated to top level; 0 Lets floated elsewhere; from 4 Lambda groups\r
-\r
-\r
-\r
-==================== FloatOut stats: ====================\r
-0 Lets floated to top level; 0 Lets floated elsewhere; from 3 Lambda groups\r
-\r
-\r
-\r
-==================== Grand total simplifier statistics ====================\r
-Total ticks:     11\r
-\r
-2 PreInlineUnconditionally\r
-  1 f\r
-  1 lvl\r
-1 UnfoldingDone 1 Roman.bar\r
-1 RuleFired 1 foo/bar\r
-7 BetaReduction\r
-  1 f\r
-  1 m\r
-  1 a\r
-  1 m\r
-  1 b\r
-  1 m\r
-  1 a\r
-8 SimplifierDone 8\r
-\r
-\r
+
+==================== FloatOut stats: ====================
+1 Lets floated to top level; 0 Lets floated elsewhere; from 4 Lambda groups
+
+
+
+==================== FloatOut stats: ====================
+0 Lets floated to top level; 0 Lets floated elsewhere; from 3 Lambda groups
+
+
+
+==================== Grand total simplifier statistics ====================
+Total ticks:     11
+
+2 PreInlineUnconditionally
+  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
+
+
index 497bc8b..334691d 100644 (file)
@@ -2,6 +2,12 @@
 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'
+    Relevant bindings include
+      liftArray :: arr i a -> E m (forall v. [E m i] -> E' v m a)
+        (bound at simpl017.hs:39:1)
+      a :: arr i a (bound at simpl017.hs:39:11)
+      ix :: [E m i] -> m i (bound at simpl017.hs:41:9)
+      f :: [E m i] -> E' v0 m a (bound at simpl017.hs:43:9)
     In the first argument of `return', namely `f'
     In a stmt of a 'do' block: return f
     In the first argument of `E', namely
@@ -12,16 +18,32 @@ simpl017.hs:44:12:
              return f })'
 
 simpl017.hs:63:5:
-    Couldn't match expected type `[E (ST t0) Int] -> E (ST s) Int'
-                with actual type `forall v. [E (ST s) Int] -> E' v (ST s) Int'
+    Couldn't match type `forall v.
+                         [E' RValue (ST s) Int] -> E' v (ST s) Int'
+                  with `[E (ST t0) Int] -> E' RValue (ST s) Int'
+    Expected type: [E (ST t0) Int] -> E (ST s) Int
+      Actual type: forall v. [E (ST s) Int] -> E' v (ST s) Int
+    Relevant bindings include
+      foo :: STArray s Int Int -> ST s Int (bound at simpl017.hs:59:1)
+      ma :: STArray s Int Int (bound at simpl017.hs:59:5)
+      a :: forall v. [E (ST s) Int] -> E' v (ST s) Int
+        (bound at simpl017.hs:60:5)
     The function `a' is applied to one argument,
     but its type `forall v. [E (ST s) Int] -> E' v (ST s) Int' has none
     In the first argument of `plus', namely `a [one]'
     In a stmt of a 'do' block: a [one] `plus` a [one]
 
 simpl017.hs:63:19:
-    Couldn't match expected type `[E (ST t1) Int] -> E (ST s) Int'
-                with actual type `forall v. [E (ST s) Int] -> E' v (ST s) Int'
+    Couldn't match type `forall v.
+                         [E' RValue (ST s) Int] -> E' v (ST s) Int'
+                  with `[E (ST t1) Int] -> E' RValue (ST s) Int'
+    Expected type: [E (ST t1) Int] -> E (ST s) Int
+      Actual type: forall v. [E (ST s) Int] -> E' v (ST s) Int
+    Relevant bindings include
+      foo :: STArray s Int Int -> ST s Int (bound at simpl017.hs:59:1)
+      ma :: STArray s Int Int (bound at simpl017.hs:59:5)
+      a :: forall v. [E (ST s) Int] -> E' v (ST s) Int
+        (bound at simpl017.hs:60:5)
     The function `a' is applied to one argument,
     but its type `forall v. [E (ST s) Int] -> E' v (ST s) Int' has none
     In the second argument of `plus', namely `a [one]'
index 0fbc33a..6cc79f0 100644 (file)
@@ -14,7 +14,7 @@ import Data.Char(ord,chr)
 
 -- low level imports
 import GHC.Base                 (realWorld#)
-import GHC.IOBase               (IO(IO), unIO, unsafePerformIO)
+import GHC.IO                   (IO(IO), unIO, unsafePerformIO)
 import GHC.Prim                 (State#,RealWorld)
 
 
index 39dec37..a912b00 100644 (file)
@@ -10,5 +10,5 @@ t2 x = x
 prop_x1 x = t1 x == t2 x
 
 runTests = $( do VarI _ t _ _ <- reify (mkName "prop_x1")
-                 error $ pprint t
+                 error $ ("runTest called error: " ++ pprint t)
             )
index 01f1ffa..5c9e68c 100644 (file)
@@ -1,3 +1,11 @@
+Loading package ghc-prim ... linking ... done.
+Loading package integer-gmp ... linking ... done.
+Loading package base ... linking ... done.
+Loading package array-0.4.0.1 ... linking ... done.
+Loading package deepseq-1.3.0.1 ... linking ... done.
+Loading package containers-0.5.0.0 ... linking ... done.
+Loading package pretty-1.1.1.0 ... linking ... done.
+Loading package template-haskell ... linking ... done.
 
 T5358.hs:7:1:
     Couldn't match expected type `t1 -> t1' with actual type `Int'
@@ -10,15 +18,34 @@ T5358.hs:8:1:
     but its type `Int' has none
 
 T5358.hs:10:13:
-    Couldn't match expected type `t0 -> a0' with actual type `Int'
+    Couldn't match expected type `t -> a0' with actual type `Int'
+    Relevant bindings include
+      prop_x1 :: t -> Bool (bound at T5358.hs:10:1)
+      x :: t (bound at T5358.hs:10:9)
     The function `t1' is applied to one argument,
     but its type `Int' has none
     In the first argument of `(==)', namely `t1 x'
     In the expression: t1 x == t2 x
 
 T5358.hs:10:21:
-    Couldn't match expected type `t0 -> a0' with actual type `Int'
+    Couldn't match expected type `t -> a0' with actual type `Int'
+    Relevant bindings include
+      prop_x1 :: t -> Bool (bound at T5358.hs:10:1)
+      x :: t (bound at T5358.hs:10:9)
     The function `t2' is applied to one argument,
     but its type `Int' has none
     In the second argument of `(==)', namely `t2 x'
     In the expression: t1 x == t2 x
+
+T5358.hs:12:15:
+    Exception when trying to run compile-time code:
+      runTest called error: forall t_0 . t_0 -> GHC.Types.Bool
+      Code: do { VarI _ t _ _ <- reify (mkName "prop_x1");
+                 ($) error ((++) "runTest called error: " pprint t) }
+    In the expression:
+      $(do { VarI _ t _ _ <- reify (mkName "prop_x1");
+             error $ ("runTest called error: " ++ pprint t) })
+    In an equation for `runTests':
+        runTests
+          = $(do { VarI _ t _ _ <- reify (mkName "prop_x1");
+                   error $ ("runTest called error: " ++ pprint t) })
index ea6833b..fdeb30e 100644 (file)
@@ -1,12 +1,13 @@
-\r
-FD1.hs:16:1:\r
-    Could not deduce (a ~ (Int -> Int))\r
-    from the context (E a (Int -> Int))\r
-      bound by the type signature for\r
-                 plus :: E a (Int -> Int) => Int -> a\r
-      at FD1.hs:15:9-38\r
-      `a' is a rigid type variable bound by\r
-          the type signature for plus :: E a (Int -> Int) => Int -> a\r
-          at FD1.hs:15:9\r
-    The equation(s) for `plus' have two arguments,\r
-    but its type `Int -> a' has only one\r
+
+FD1.hs:16:1:
+    Could not deduce (a ~ (Int -> Int))
+    from the context (E a (Int -> Int))
+      bound by the type signature for
+                 plus :: E a (Int -> Int) => Int -> a
+      at FD1.hs:15:9-38
+      `a' is a rigid type variable bound by
+          the type signature for plus :: E a (Int -> Int) => Int -> a
+          at FD1.hs:15:9
+    Relevant bindings include plus :: Int -> a (bound at FD1.hs:16:1)
+    The equation(s) for `plus' have two arguments,
+    but its type `Int -> a' has only one
index 47221c5..8822c1c 100644 (file)
@@ -1,6 +1,6 @@
 
 FD2.hs:26:34:
-    Could not deduce (e1 ~ e)
+    Could not deduce (e ~ e1)
     from the context (Foldable a)
       bound by the class declaration for `Foldable'
       at FD2.hs:(17,1)-(26,39)
@@ -12,14 +12,20 @@ FD2.hs:26:34:
       bound by the type signature for
                  mf :: Elem a e1 => e1 -> Maybe e1 -> Maybe e1
       at FD2.hs:24:18-54
-      `e1' is a rigid type variable bound by
-           the type signature for
-             mf :: Elem a e1 => e1 -> Maybe e1 -> Maybe e1
-           at FD2.hs:24:18
       `e' is a rigid type variable bound by
           the type signature for
             foldr1 :: Elem a e => (e -> e -> e) -> a -> e
           at FD2.hs:21:13
+      `e1' is a rigid type variable bound by
+           the type signature for
+             mf :: Elem a e1 => e1 -> Maybe e1 -> Maybe e1
+           at FD2.hs:24:18
+    Relevant bindings include
+      foldr1 :: (e -> e -> e) -> a -> e (bound at FD2.hs:22:3)
+      f :: e -> e -> e (bound at FD2.hs:22:10)
+      mf :: e1 -> Maybe e1 -> Maybe e1 (bound at FD2.hs:25:12)
+      x :: e1 (bound at FD2.hs:26:15)
+      y :: e1 (bound at FD2.hs:26:23)
     In the return type of a call of `f'
     In the first argument of `Just', namely `(f x y)'
     In the expression: Just (f x y)
index 00b0a81..ad849e6 100644 (file)
@@ -4,6 +4,9 @@ FD3.hs:15:15:
       `a' is a rigid type variable bound by
           the type signature for translate :: (String, a) -> A a
           at FD3.hs:14:14
+    Relevant bindings include
+      translate :: (String, a) -> A a (bound at FD3.hs:15:1)
+      a :: (String, a) (bound at FD3.hs:15:11)
     When using functional dependencies to combine
       MkA a a,
         arising from the dependency `a -> b'
index 2e943ac..bbb8d0c 100644 (file)
@@ -1,24 +1,36 @@
 
 T2494.hs:15:14:
-    Couldn't match type `b' with `a'
-      `b' is a rigid type variable bound by
-          the RULE "foo/foo" at T2494.hs:14:16
+    Couldn't match type `a' with `b'
       `a' is a rigid type variable bound by
           the RULE "foo/foo" at T2494.hs:13:16
+      `b' is a rigid type variable bound by
+          the RULE "foo/foo" at T2494.hs:14:16
     Expected type: Maybe (m a) -> Maybe (m a)
       Actual type: Maybe (m b) -> Maybe (m b)
+    Relevant bindings include
+      x :: Maybe a (bound at T2494.hs:14:65)
+      g :: forall (m :: * -> *). Monad m => Maybe (m b) -> Maybe (m b)
+        (bound at T2494.hs:14:11)
+      f :: forall (m :: * -> *). Monad m => Maybe (m a) -> Maybe (m a)
+        (bound at T2494.hs:13:11)
     In the first argument of `foo', namely `g'
     In the second argument of `foo', namely `(foo g x)'
     In the expression: foo f (foo g x)
 
 T2494.hs:15:30:
-    Couldn't match type `b' with `a'
-      `b' is a rigid type variable bound by
-          the RULE "foo/foo" at T2494.hs:14:16
+    Couldn't match type `a' with `b'
       `a' is a rigid type variable bound by
           the RULE "foo/foo" at T2494.hs:13:16
+      `b' is a rigid type variable bound by
+          the RULE "foo/foo" at T2494.hs:14:16
     Expected type: Maybe (m a) -> Maybe (m a)
       Actual type: Maybe (m b) -> Maybe (m b)
+    Relevant bindings include
+      x :: Maybe a (bound at T2494.hs:14:65)
+      g :: forall (m :: * -> *). Monad m => Maybe (m b) -> Maybe (m b)
+        (bound at T2494.hs:14:11)
+      f :: forall (m :: * -> *). Monad m => Maybe (m a) -> Maybe (m a)
+        (bound at T2494.hs:13:11)
     In the second argument of `(.)', namely `g'
     In the first argument of `foo', namely `(f . g)'
     In the expression: foo (f . g) x
index a22689b..e7d7f7c 100644 (file)
@@ -8,10 +8,15 @@ tc141.hs:11:12:
 
 tc141.hs:11:31:
     Couldn't match expected type `a1' with actual type `a'
-      `a1' is a rigid type variable bound by
-           an expression type signature: a1 at tc141.hs:11:31
-      `a' is a rigid type variable bound by
-          the inferred type of f :: (a, a) -> (t, a) at tc141.hs:11:1
+      because type variable `a1' would escape its scope
+    This (rigid, skolem) type variable is bound by
+      an expression type signature: a1
+      at tc141.hs:11:31-34
+    Relevant bindings include
+      f :: (a, a) -> (t, a) (bound at tc141.hs:11:1)
+      x :: (a, a) (bound at tc141.hs:11:3)
+      q :: a (bound at tc141.hs:11:17)
+      p :: a (bound at tc141.hs:11:12)
     In the expression: q :: a
     In the expression: (q :: a, p)
     In the expression: let (p :: a, q :: a) = x in (q :: a, p)
@@ -30,10 +35,14 @@ tc141.hs:13:13:
 
 tc141.hs:15:18:
     Couldn't match expected type `a2' with actual type `t'
-      `a2' is a rigid type variable bound by
-           the type signature for v :: a2 at tc141.hs:14:19
-      `t' is a rigid type variable bound by
-          the inferred type of g :: a -> t -> a1 at tc141.hs:13:1
+      because type variable `a2' would escape its scope
+    This (rigid, skolem) type variable is bound by
+      the type signature for v :: a2
+      at tc141.hs:14:19
+    Relevant bindings include
+      g :: a -> t -> a1 (bound at tc141.hs:13:1)
+      b :: t (bound at tc141.hs:13:5)
+      v :: a2 (bound at tc141.hs:15:14)
     In the expression: b
     In an equation for `v': v = b
     In the expression:
index cbaa0ac..8c0c813 100644 (file)
@@ -7,7 +7,6 @@ tc168.hs:17:1:
       at tc168.hs:17:1-16
     The type variable `b0' is ambiguous
     Possible fix: add a type signature that fixes these type variable(s)
-    Possible fix: add an instance declaration for (C a1 (a, b0))
     When checking that `g'
       has the inferred type `forall a b a1. C a1 (a, b) => a1 -> a'
     Probable cause: the inferred type is ambiguous
index e6c5675..3fc5e25 100644 (file)
@@ -14,9 +14,9 @@ tc211.hs:15:22:
         (head foo) foo
 
 tc211.hs:70:9:
-    Couldn't match type `forall a1. a1 -> a1' with `a -> a'
+    Couldn't match type `forall a2. a2 -> a2' with `a1 -> a1'
     Expected type: List (forall a. a -> a)
-                   -> (forall a. a -> a) -> a -> a
+                   -> (forall a. a -> a) -> a1 -> a1
       Actual type: List (forall a. a -> a)
                    -> (forall a. a -> a) -> forall a. a -> a
     In the expression:
index 8a942de..60a3342 100644 (file)
@@ -1,12 +1,14 @@
 
 FDsFromGivens.hs:21:15:
-    Couldn't match type `Char' with `[a0]'
+    Couldn't match type `Char' with `[a]'
+    Relevant bindings include
+      bar :: KCC -> a -> a (bound at FDsFromGivens.hs:21:1)
     When using functional dependencies to combine
       C Char Char,
         arising from a pattern with constructor
                        KCC :: C Char Char => () -> KCC,
                      in an equation for `bar'
         at FDsFromGivens.hs:21:6-10
-      C Char [a0], arising from a use of `f' at FDsFromGivens.hs:21:15
+      C Char [a], arising from a use of `f' at FDsFromGivens.hs:21:15
     In the expression: f
     In an equation for `bar': bar (KCC _) = f
index bea5495..479087b 100644 (file)
@@ -1,56 +1,53 @@
-{-# LANGUAGE RankNTypes, GADTs, TypeFamilies #-}\r
-module Test where \r
-\r
-\r
-data T a where \r
-  MkT :: a -> T a \r
-  MkT2 :: forall a b. (b ~ T b) => b -> T a\r
-  MkT3 :: forall a. (a ~ Bool) => T a \r
--- Occurs checks in givens\r
-foo :: forall a. (a ~ T a) => a -> a \r
-foo x = x \r
-\r
-blah x = case x of \r
-           MkT2 y -> ()\r
-\r
--- Mismatches in givens \r
-bloh :: T Int -> () \r
-bloh x = case x of \r
-           MkT3 -> () \r
-\r
-type family F a b \r
-type family G a b\r
-type instance F a Bool = a \r
-type instance G a Char = a\r
-\r
-goo1 :: forall a b. (F a b ~ [a]) => b -> a  -> a\r
-goo1 = undefined \r
-\r
-goo2 :: forall a. G a Char ~ [Int] => a -> a\r
-goo2 = undefined\r
-\r
--- Just an occurs check\r
-test1 = goo1 False undefined\r
-\r
--- A frozen occurs check, now transformed to decomposition error\r
-test2 = goo2 (goo1 False undefined)\r
-test3 = goo1 False (goo2 undefined)\r
-\r
-\r
--- A frozen occurs check, now transformed to both a decomposition and occurs check\r
-data M a where \r
-  M :: M a \r
-data T2 a b where\r
-  T2 :: T2 a b \r
-\r
-goo3 :: forall a b. F a b ~ T2 (M a) a => b -> a -> a \r
-goo3 = undefined\r
-\r
-goo4 :: forall a c. G a Char ~ T2 (T2 c c) c => a -> a\r
-goo4 = undefined \r
-\r
-test4 = goo4 (goo3 False undefined)\r
-test5 = goo3 False (goo4 undefined)\r
-\r
-\r
-\r
+{-# LANGUAGE RankNTypes, GADTs, TypeFamilies #-}
+module Test where 
+
+
+data T a where 
+  MkT :: a -> T a 
+  MkT3 :: forall a. (a ~ Bool) => T a 
+
+-- Occurs checks in givens
+foo :: forall a. (a ~ T a) => a -> a 
+foo x = x 
+
+-- Mismatches in givens 
+bloh :: T Int -> () 
+bloh x = case x of 
+           MkT3 -> () 
+
+type family F a b 
+type family G a b
+type instance F a Bool = a 
+type instance G a Char = a
+
+goo1 :: forall a b. (F a b ~ [a]) => b -> a  -> a
+goo1 = undefined 
+
+goo2 :: forall a. G a Char ~ [Int] => a -> a
+goo2 = undefined
+
+-- Just an occurs check
+test1 = goo1 False undefined
+
+-- A frozen occurs check, now transformed to decomposition error
+test2 = goo2 (goo1 False undefined)
+test3 = goo1 False (goo2 undefined)
+
+
+-- A frozen occurs check, now transformed to both a decomposition and occurs check
+data M a where 
+  M :: M a 
+data T2 a b where
+  T2 :: T2 a b 
+
+goo3 :: forall a b. F a b ~ T2 (M a) a => b -> a -> a 
+goo3 = undefined
+
+goo4 :: forall a c. G a Char ~ T2 (T2 c c) c => a -> a
+goo4 = undefined 
+
+test4 = goo4 (goo3 False undefined)
+test5 = goo3 False (goo4 undefined)
+
+
+
index d4ce2ce..0e2ec6c 100644 (file)
@@ -7,22 +7,7 @@ FrozenErrorTests.hs:10:8:
     Inaccessible code in
       the type signature for foo :: a ~ T a => a -> a
 
-FrozenErrorTests.hs:14:12:
-    Couldn't match type `b' with `T b'
-      `b' is a rigid type variable bound by
-          a pattern with constructor
-            MkT2 :: forall a b. b ~ T b => b -> T a,
-          in a case alternative
-          at FrozenErrorTests.hs:14:12
-    Inaccessible code in
-      a pattern with constructor
-        MkT2 :: forall a b. b ~ T b => b -> T a,
-      in a case alternative
-    In the pattern: MkT2 y
-    In a case alternative: MkT2 y -> ()
-    In the expression: case x of { MkT2 y -> () }
-
-FrozenErrorTests.hs:19:12:
+FrozenErrorTests.hs:16:12:
     Couldn't match type `Int' with `Bool'
     Inaccessible code in
       a pattern with constructor
@@ -32,14 +17,16 @@ FrozenErrorTests.hs:19:12:
     In a case alternative: MkT3 -> ()
     In the expression: case x of { MkT3 -> () }
 
-FrozenErrorTests.hs:33:9:
-    Occurs check: cannot construct the infinite type: a0 = [a0]
-    Expected type: [a0]
-      Actual type: F a0 Bool
+FrozenErrorTests.hs:30:9:
+    Occurs check: cannot construct the infinite type: a ~ [a]
+    Expected type: [a]
+      Actual type: F a Bool
+    Relevant bindings include
+      test1 :: a (bound at FrozenErrorTests.hs:30:1)
     In the expression: goo1 False undefined
     In an equation for `test1': test1 = goo1 False undefined
 
-FrozenErrorTests.hs:36:15:
+FrozenErrorTests.hs:33:15:
     Couldn't match type `Int' with `[Int]'
     Expected type: [[Int]]
       Actual type: F [Int] Bool
@@ -47,24 +34,28 @@ FrozenErrorTests.hs:36:15:
     In the expression: goo2 (goo1 False undefined)
     In an equation for `test2': test2 = goo2 (goo1 False undefined)
 
-FrozenErrorTests.hs:37:9:
-    Couldn't match type `[Int]' with `Int'
+FrozenErrorTests.hs:34:9:
+    Couldn't match type `Int' with `[Int]'
     Expected type: [[Int]]
       Actual type: F [Int] Bool
     In the expression: goo1 False (goo2 undefined)
     In an equation for `test3': test3 = goo1 False (goo2 undefined)
 
-FrozenErrorTests.hs:52:15:
-    Couldn't match type `T2 c0 c0' with `M (T2 (T2 c0 c0) c0)'
-    Expected type: T2 (M (T2 (T2 c0 c0) c0)) (T2 (T2 c0 c0) c0)
-      Actual type: F (T2 (T2 c0 c0) c0) Bool
+FrozenErrorTests.hs:49:15:
+    Couldn't match type `T2 c c' with `M (T2 (T2 c c) c)'
+    Expected type: T2 (M (T2 (T2 c c) c)) (T2 (T2 c c) c)
+      Actual type: F (T2 (T2 c c) c) Bool
+    Relevant bindings include
+      test4 :: T2 (T2 c c) c (bound at FrozenErrorTests.hs:49:1)
     In the first argument of `goo4', namely `(goo3 False undefined)'
     In the expression: goo4 (goo3 False undefined)
     In an equation for `test4': test4 = goo4 (goo3 False undefined)
 
-FrozenErrorTests.hs:53:9:
-    Couldn't match type `T2 c0 c0' with `M (T2 (T2 c0 c0) c0)'
-    Expected type: T2 (M (T2 (T2 c0 c0) c0)) (T2 (T2 c0 c0) c0)
-      Actual type: F (T2 (T2 c0 c0) c0) Bool
+FrozenErrorTests.hs:50:9:
+    Couldn't match type `T2 c c' with `M (T2 (T2 c c) c)'
+    Expected type: T2 (M (T2 (T2 c c) c)) (T2 (T2 c c) c)
+      Actual type: F (T2 (T2 c c) c) Bool
+    Relevant bindings include
+      test5 :: T2 (T2 c c) c (bound at FrozenErrorTests.hs:50:1)
     In the expression: goo3 False (goo4 undefined)
     In an equation for `test5': test5 = goo3 False (goo4 undefined)
index efad8b3..d8efdfe 100644 (file)
@@ -4,7 +4,6 @@ IPFail.hs:6:18:
     from the context (?x::Int)
       bound by the type signature for f0 :: (?x::Int) => () -> Bool
       at IPFail.hs:5:7-31
-    Possible fix: add an instance declaration for (Num Bool)
     In the expression: 5
     In the expression: let ?x = 5 in ?x
     In an equation for `f0': f0 () = let ?x = 5 in ?x
index 7cc4556..fbd0b44 100644 (file)
@@ -1,9 +1,7 @@
-\r
-LongWayOverlapping.hs:23:11:\r
-    No instance for (EmbAsChild [Char] Char)\r
-      arising from a use of `emb'\r
-    Possible fix:\r
-      add an instance declaration for (EmbAsChild [Char] Char)\r
-    In the expression: emb 'c'\r
-    In an equation for `emb': emb _ = emb 'c'\r
-    In the instance declaration for `EmbAsChild [Char] Bool'\r
+
+LongWayOverlapping.hs:23:11:
+    No instance for (EmbAsChild [Char] Char)
+      arising from a use of `emb'
+    In the expression: emb 'c'
+    In an equation for `emb': emb _ = emb 'c'
+    In the instance declaration for `EmbAsChild [Char] Bool'
index 277b84a..37970cc 100644 (file)
@@ -1,7 +1,5 @@
 
 SCLoop.hs:22:7:
-    No instance for (SC ())
-      arising from a use of `op'
-    Possible fix: add an instance declaration for (SC ())
+    No instance for (SC ()) arising from a use of `op'
     In the expression: op () ([Just True])
     In an equation for `foo': foo = op () ([Just True])
index d7ab2be..0838984 100644 (file)
@@ -4,6 +4,9 @@ T1899.hs:12:29:
       `a' is a rigid type variable bound by
           the type signature for transRHS :: [a] -> Int -> Constraint a
           at T1899.hs:9:14
+    Relevant bindings include
+      transRHS :: [a] -> Int -> Constraint a (bound at T1899.hs:10:2)
+      varSet :: [a] (bound at T1899.hs:10:11)
     In the return type of a call of `Auxiliary'
     In the first argument of `Prop', namely `(Auxiliary undefined)'
     In the expression: Prop (Auxiliary undefined)
index 5fa8f00..53ea2b1 100644 (file)
@@ -1,6 +1,6 @@
 
 T2414.hs:9:13:
-    Occurs check: cannot construct the infinite type: b0 = (Bool, b0)
+    Occurs check: cannot construct the infinite type: b0 ~ (Bool, b0)
     Expected type: b0 -> Maybe (Bool, b0)
       Actual type: b0 -> Maybe b0
     In the first argument of `unfoldr', namely `Just'
index bf19e68..8943b97 100644 (file)
@@ -1,7 +1,8 @@
 
 T2534.hs:3:19:
-    Couldn't match expected type `a0 -> a0 -> b0'
-                with actual type `[a1]'
+    Couldn't match expected type `a -> a -> b' with actual type `[a0]'
+    Relevant bindings include
+      foo :: a -> a -> b (bound at T2534.hs:3:1)
     In the second argument of `foldr', namely `[]'
     In the expression: foldr (>>=) [] []
     In an equation for `foo': foo = foldr (>>=) [] []
index aa89656..3bb0f49 100644 (file)
@@ -1,13 +1,17 @@
 
 T2688.hs:8:22:
-    Could not deduce (v ~ s)
+    Could not deduce (s ~ v)
     from the context (VectorSpace v s)
       bound by the class declaration for `VectorSpace'
       at T2688.hs:(5,1)-(8,23)
-      `v' is a rigid type variable bound by
-          the class declaration for `VectorSpace' at T2688.hs:5:19
       `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
+    Relevant bindings include
+      ^/ :: v -> s -> v (bound at T2688.hs:8:5)
+      v :: v (bound at T2688.hs:8:5)
+      s :: s (bound at T2688.hs:8:10)
     In the second argument of `(/)', namely `s'
     In the second argument of `(*^)', namely `(1 / s)'
     In the expression: v *^ (1 / s)
index 481a3bd..6805650 100644 (file)
@@ -1,20 +1,24 @@
-\r
-T2714.hs:8:5:\r
-    Couldn't match type `a' with `f0 b'\r
-      `a' is a rigid type variable bound by\r
-          the type signature for f :: ((a -> b) -> b) -> forall c. c -> a\r
-          at T2714.hs:7:6\r
-    Expected type: ((a -> b) -> b) -> c -> a\r
-      Actual type: ((a -> b) -> b) -> f0 (a -> b) -> f0 b\r
-    In the expression: ffmap\r
-    In an equation for `f': f = ffmap\r
-\r
-T2714.hs:8:5:\r
-    Couldn't match type `c' with `f0 (f0 b -> b)'\r
-      `c' is a rigid type variable bound by\r
-          the type signature for f :: ((a -> b) -> b) -> c -> a\r
-          at T2714.hs:8:1\r
-    Expected type: ((a -> b) -> b) -> c -> a\r
-      Actual type: ((a -> b) -> b) -> f0 (a -> b) -> f0 b\r
-    In the expression: ffmap\r
-    In an equation for `f': f = ffmap\r
+
+T2714.hs:8:5:
+    Couldn't match type `c' with `f0 (a -> b)'
+      `c' is a rigid type variable bound by
+          the type signature for f :: ((a -> b) -> b) -> c -> a
+          at T2714.hs:8:1
+    Expected type: ((a -> b) -> b) -> c -> a
+      Actual type: ((a -> b) -> b) -> f0 (a -> b) -> f0 b
+    Relevant bindings include
+      f :: ((a -> b) -> b) -> forall c. c -> a (bound at T2714.hs:8:1)
+    In the expression: ffmap
+    In an equation for `f': f = ffmap
+
+T2714.hs:8:5:
+    Couldn't match type `a' with `f0 b'
+      `a' is a rigid type variable bound by
+          the type signature for f :: ((a -> b) -> b) -> forall c. c -> a
+          at T2714.hs:7:6
+    Expected type: ((a -> b) -> b) -> c -> a
+      Actual type: ((a -> b) -> b) -> f0 (a -> b) -> f0 b
+    Relevant bindings include
+      f :: ((a -> b) -> b) -> forall c. c -> a (bound at T2714.hs:8:1)
+    In the expression: ffmap
+    In an equation for `f': f = ffmap
index 56b1a13..b70c4d1 100644 (file)
@@ -1,6 +1,5 @@
 
 T2846b.hs:5:5:
     No instance for (Show (Num a0 => a0)) arising from a use of `show'
-    Possible fix: add an instance declaration for (Show (Num a0 => a0))
     In the expression: show ([1, 2, 3] :: [Num a => a])
     In an equation for `f': f = show ([1, 2, 3] :: [Num a => a])
index 477c3aa..08a02ce 100644 (file)
@@ -1,7 +1,6 @@
 
 T3592.hs:8:5:
     No instance for (Show (T a)) arising from a use of `show'
-    Possible fix: add an instance declaration for (Show (T a))
     In the expression: show
     In an equation for `f': f = show
 
index 876a499..07b1d32 100644 (file)
@@ -1,10 +1,16 @@
 
 T3950.hs:15:13:
     Couldn't match kind `* -> *' with `*'
-    Expected type: w (Id p)
-      Actual type: Sealed (Id p0 x0)
-    Kind incompatibility when matching types:
+    When matching types
       w :: (* -> * -> *) -> *
       Sealed :: (* -> *) -> *
+    Expected type: w (Id p)
+      Actual type: Sealed (Id p0 x0)
     In the first argument of `Just', namely rp'
     In the expression: Just rp'
+    In an equation for `rp':
+        rp _
+          = Just rp'
+          where
+              rp' :: Sealed (Id p x)
+              rp' = undefined
index 272f8b5..728655f 100644 (file)
@@ -8,6 +8,9 @@ T5300.hs:15:9:
       at T5300.hs:14:7-69
     The type variable `c0' is ambiguous
     Possible fix: add a type signature that fixes these type variable(s)
+    Relevant bindings include
+      f2 :: a1 -> StateT (T b2) m a2 (bound at T5300.hs:15:1)
+      fm :: a1 (bound at T5300.hs:15:4)
     In the first argument of `(>>=)', namely `f1 fm'
     In the expression: f1 fm >>= return . undefined
     In an equation for `f2': f2 fm = f1 fm >>= return . undefined
index 9daf268..63229e6 100644 (file)
@@ -1,6 +1,9 @@
-\r
-T5570.hs:7:16:\r
-    Couldn't match kind `#' against `*'\r
-    In the second argument of `($)', namely `D# $ 3.0##'\r
-    In the expression: print $ D# $ 3.0##\r
-    In an equation for `main': main = print $ D# $ 3.0##\r
+
+T5570.hs:7:16:
+    Couldn't match kind `*' with `#'
+    When matching types
+      t0 :: *
+      Double# :: #
+    In the second argument of `($)', namely `D# $ 3.0##'
+    In the expression: print $ D# $ 3.0##
+    In an equation for `main': main = print $ D# $ 3.0##
index 0aa8b17..a94aa88 100644 (file)
@@ -1,10 +1,64 @@
-\r
-T5684.hs:53:12:\r
-    No instance for (A Bool)\r
-      arising from a use of `op'\r
-    Possible fix: add an instance declaration for (A Bool)\r
-    In the expression: op False False\r
-    In the expression:\r
-      [op True undefined, op False False, op 'c' undefined]\r
-    In an equation for `flop6':\r
-        flop6 = [op True undefined, op False False, op 'c' undefined]\r
+
+T5684.hs:25:12:
+    No instance for (A b6) arising from a use of `op'
+    In the expression: op True undefined
+    In the expression:
+      [op False False, op 'c' undefined, op True undefined]
+    In an equation for `flop1':
+        flop1 = [op False False, op 'c' undefined, op True undefined]
+
+T5684.hs:30:12:
+    No instance for (A b5) arising from a use of `op'
+    In the expression: op True undefined
+    In the expression:
+      [op False False, op True undefined, op 'c' undefined]
+    In an equation for `flop2':
+        flop2 = [op False False, op True undefined, op 'c' undefined]
+
+T5684.hs:36:12:
+    No instance for (A b4) arising from a use of `op'
+    In the expression: op True undefined
+    In the expression:
+      [op 'c' undefined, op True undefined, op False False]
+    In an equation for `flop3':
+        flop3 = [op 'c' undefined, op True undefined, op False False]
+
+T5684.hs:42:12:
+    No instance for (A b3) arising from a use of `op'
+    In the expression: op True undefined
+    In the expression:
+      [op 'c' undefined, op False False, op True undefined]
+    In an equation for `flop4':
+        flop4 = [op 'c' undefined, op False False, op True undefined]
+
+T5684.hs:46:12:
+    No instance for (A b2) arising from a use of `op'
+    In the expression: op True undefined
+    In the expression:
+      [op True undefined, op 'c' undefined, op False False]
+    In an equation for `flop5':
+        flop5 = [op True undefined, op 'c' undefined, op False False]
+
+T5684.hs:52:12:
+    No instance for (A b0) arising from a use of `op'
+    In the expression: op True undefined
+    In the expression:
+      [op True undefined, op False False, op 'c' undefined]
+    In an equation for `flop6':
+        flop6 = [op True undefined, op False False, op 'c' undefined]
+
+T5684.hs:53:12:
+    No instance for (A Bool) arising from a use of `op'
+    In the expression: op False False
+    In the expression:
+      [op True undefined, op False False, op 'c' undefined]
+    In an equation for `flop6':
+        flop6 = [op True undefined, op False False, op 'c' undefined]
+
+T5684.hs:54:12:
+    No instance for (B Char b1) arising from a use of `op'
+    In the expression: op 'c' undefined
+    In the expression:
+      [op True undefined, op False False, op 'c' undefined]
+    In an equation for `flop6':
+        flop6 = [op True undefined, op False False, op 'c' undefined]
index 28f9c01..ca4562e 100644 (file)
@@ -1,6 +1,9 @@
 
 T5689.hs:10:36:
-    Couldn't match expected type `t' with actual type `Bool'
+    Couldn't match expected type `Bool' with actual type `t'
+    Relevant bindings include
+      r :: IORef (t -> t) (bound at T5689.hs:7:14)
+      v :: t (bound at T5689.hs:10:28)
     In the expression: v
     In the expression: if v then False else True
     In the second argument of `writeIORef', namely
index eeba39f..c36d64e 100644 (file)
@@ -1,14 +1,17 @@
 
 T5853.hs:15:52:
-    Could not deduce (fb ~ Subst fa1 (Elem fb))
+    Could not deduce (Subst (Subst fa a) b ~ Subst fa b)
     from the context (F fa,
-                      Subst fa (Elem fb) ~ fb,
-                      Subst fb (Elem fa) ~ fa,
-                      F fa1,
-                      Subst fa1 (Elem fa) ~ fa,
-                      Subst fa (Elem fa1) ~ fa1)
+                      Elem (Subst fa b) ~ b,
+                      Subst (Subst fa b) (Elem fa) ~ fa,
+                      F (Subst fa a),
+                      Elem (Subst fa a) ~ a,
+                      Subst (Subst fa a) (Elem fa) ~ fa)
       bound by the RULE "map/map" at T5853.hs:15:2-57
-      `fb' is a rigid type variable bound by
-           the RULE "map/map" at T5853.hs:15:2
+    NB: `Subst' is a type function, and may not be injective
+    Relevant bindings include
+      xs :: Subst fa a (bound at T5853.hs:15:23)
+      g :: a -> Elem fa (bound at T5853.hs:15:21)
+      f :: Elem fa -> b (bound at T5853.hs:15:19)
     In the expression: (f . g) <$> xs
     When checking the transformation rule "map/map"
index 5e0cf15..0ce0d5d 100644 (file)
@@ -7,7 +7,5 @@ T5858.hs:11:7:
     Note: there is a potential instance available:
       instance t1 ~ String => InferOverloaded (t1, t1)
         -- Defined at T5858.hs:8:10
-    Possible fix:
-      add an instance declaration for (InferOverloaded ([a0], [a1]))
     In the expression: infer ([], [])
     In an equation for `foo': foo = infer ([], [])
index ee9bb4b..01048c4 100644 (file)
@@ -1,8 +1,6 @@
 
 mc20.hs:14:31:
-    No instance for (Ord Unorderable)
-      arising from a use of `groupWith'
-    Possible fix: add an instance declaration for (Ord Unorderable)
+    No instance for (Ord Unorderable) arising from a use of `groupWith'
     In the expression: groupWith
     In a stmt of a monad comprehension: then group by x using groupWith
     In the expression:
index 6a3474c..d020bae 100644 (file)
@@ -1,10 +1,11 @@
-\r
-mc22.hs:10:26:\r
-    Couldn't match type `a' with `t0 a'\r
-      `a' is a rigid type variable bound by\r
-          a type expected by the context: [a] -> [t0 a] at mc22.hs:10:9\r
-    Expected type: [a] -> [t0 a]\r
-      Actual type: [a] -> [a]\r
-    In the return type of a call of `take'\r
-    In the expression: take 5\r
-    In a stmt of a monad comprehension: then group using take 5\r
+
+mc22.hs:10:26:
+    Couldn't match type `a' with `t a'
+      `a' is a rigid type variable bound by
+          a type expected by the context: [a] -> [t a] at mc22.hs:10:9
+    Expected type: [a] -> [t a]
+      Actual type: [a] -> [a]
+    Relevant bindings include foo :: [t [Char]] (bound at mc22.hs:8:1)
+    In the return type of a call of `take'
+    In the expression: take 5
+    In a stmt of a monad comprehension: then group using take 5
index 632bac9..b8c3987 100644 (file)
@@ -1,9 +1,10 @@
-\r
-mc23.hs:9:29:\r
-    Couldn't match type `[a0]' with `a -> b0'\r
-    Expected type: (a -> b0) -> [a] -> t0 a\r
-      Actual type: [a0] -> [a0]\r
-    In the return type of a call of `take'\r
-    Probable cause: `take' is applied to too many arguments\r
-    In the expression: take 5\r
-    In a stmt of a monad comprehension: then take 5 by x\r
+
+mc23.hs:9:29:
+    Couldn't match type `[a0]' with `a -> b'
+    Expected type: (a -> b) -> [a] -> t a
+      Actual type: [a0] -> [a0]
+    Relevant bindings include z :: t b (bound at mc23.hs:9:1)
+    In the return type of a call of `take'
+    Probable cause: `take' is applied to too many arguments
+    In the expression: take 5
+    In a stmt of a monad comprehension: then take 5 by x
index a2b11e2..1249bc2 100644 (file)
@@ -1,9 +1,9 @@
-\r
-mc24.hs:10:31:\r
-    Couldn't match type `[a0]' with `a -> a1'\r
-    Expected type: (a -> a1) -> [a] -> t0 [a]\r
-      Actual type: [a0] -> [a0]\r
-    In the return type of a call of `take'\r
-    Probable cause: `take' is applied to too many arguments\r
-    In the expression: take 2\r
-    In a stmt of a monad comprehension: then group by x using take 2\r
+
+mc24.hs:10:31:
+    Couldn't match type `[a0]' with `a -> Integer'
+    Expected type: (a -> Integer) -> [a] -> t [a]
+      Actual type: [a0] -> [a0]
+    In the return type of a call of `take'
+    Probable cause: `take' is applied to too many arguments
+    In the expression: take 2
+    In a stmt of a monad comprehension: then group by x using take 2
index 643f352..3925f83 100644 (file)
@@ -1,8 +1,9 @@
-\r
-mc25.hs:9:46:\r
-    Couldn't match type `Int' with `a -> t0'\r
-    Expected type: (a -> t0) -> [a] -> [t1 a]\r
-      Actual type: Int -> [a] -> [a]\r
-    In the expression: take\r
-    In a stmt of a monad comprehension: then group by x using take\r
-    In the expression: [x | x <- [1 .. 10], then group by x using take]\r
+
+mc25.hs:9:46:
+    Couldn't match type `Int' with `a -> t'
+    Expected type: (a -> t) -> [a] -> [t1 a]
+      Actual type: Int -> [a] -> [a]
+    Relevant bindings include z :: [t1 t] (bound at mc25.hs:9:1)
+    In the expression: take
+    In a stmt of a monad comprehension: then group by x using take
+    In the expression: [x | x <- [1 .. 10], then group by x using take]
index 7c9b8ba..85b6788 100644 (file)
@@ -1,6 +1,7 @@
 
 tcfail001.hs:9:2:
     Couldn't match expected type `[t0] -> [a0]' with actual type `[a]'
+    Relevant bindings include op :: [a] (bound at tcfail001.hs:9:2)
     The equation(s) for `op' have one argument,
     but its type `[a]' has none
     In the instance declaration for `A [a]'
index 12a77d0..3a9c89c 100644 (file)
@@ -1,5 +1,8 @@
 
 tcfail002.hs:4:7:
-    Occurs check: cannot construct the infinite type: t0 = [t0]
+    Occurs check: cannot construct the infinite type: t ~ [t]
+    Relevant bindings include
+      c :: [t] -> t (bound at tcfail002.hs:3:1)
+      z :: [t] (bound at tcfail002.hs:4:3)
     In the expression: z
     In an equation for `c': c z = z
index 62fb6a9..42d7c59 100644 (file)
@@ -1,8 +1,6 @@
 
 tcfail003.hs:3:10:
-    No instance for (Num Char)
-      arising from the literal `1'
-    Possible fix: add an instance declaration for (Num Char)
+    No instance for (Num Char) arising from the literal `1'
     In the expression: 1
     In the expression: [1, 'a']
     In a pattern binding: (d : e) = [1, 'a']
index 5f04088..db24fb2 100644 (file)
@@ -1,6 +1,9 @@
 
 tcfail004.hs:3:9:
-    Couldn't match expected type `(t0, t1)'
-                with actual type `(t2, t3, t4)'
+    Couldn't match expected type `(t, t1)'
+                with actual type `(Integer, Integer, Integer)'
+    Relevant bindings include
+      g :: t1 (bound at tcfail004.hs:3:4)
+      f :: t (bound at tcfail004.hs:3:2)
     In the expression: (1, 2, 3)
     In a pattern binding: (f, g) = (1, 2, 3)
index 66e6fa9..9cfae02 100644 (file)
@@ -1,5 +1,9 @@
 
 tcfail005.hs:3:9:
-    Couldn't match expected type `[t0]' with actual type `(t1, Char)'
+    Couldn't match expected type `[t]'
+                with actual type `(Integer, Char)'
+    Relevant bindings include
+      i :: [t] (bound at tcfail005.hs:3:4)
+      h :: t (bound at tcfail005.hs:3:2)
     In the expression: (1, 'a')
     In a pattern binding: (h : i) = (1, 'a')
index d9ab68b..a31f4fd 100644 (file)
@@ -1,8 +1,6 @@
-\r
-tcfail006.hs:4:24:\r
-    No instance for (Num Bool)\r
-      arising from the literal `1'\r
-    Possible fix: add an instance declaration for (Num Bool)\r
-    In the expression: 1\r
-    In the expression: (True, 1)\r
-    In a case alternative: True -> (True, 1)\r
+
+tcfail006.hs:4:24:
+    No instance for (Num Bool) arising from the literal `1'
+    In the expression: 1
+    In the expression: (True, 1)
+    In a case alternative: True -> (True, 1)
index 6f93a46..d375e40 100644 (file)
@@ -1,10 +1,8 @@
-\r
-tcfail007.hs:3:15:\r
-    No instance for (Num Bool)\r
-      arising from a use of `+'\r
-    Possible fix: add an instance declaration for (Num Bool)\r
-    In the expression: x + 1\r
-    In an equation for `n':\r
-        n x\r
-          | True = x + 1\r
-          | False = True\r
+
+tcfail007.hs:3:15:
+    No instance for (Num Bool) arising from a use of `+'
+    In the expression: x + 1
+    In an equation for `n':
+        n x
+          | True = x + 1
+          | False = True
index 978d946..c0791f2 100644 (file)
@@ -2,10 +2,10 @@
 tcfail008.hs:3:5:
     No instance for (Num a0) arising from the literal `1'
     The type variable `a0' is ambiguous
-    Possible cause: the monomorphism restriction applied to the following:
-      o :: [a0] (bound at tcfail008.hs:3:1)
+    Possible cause: the monomorphism restriction applied to: `o'
     Probable fix: give these definition(s) an explicit type signature
                   or use -XNoMonomorphismRestriction
+    Relevant bindings include o :: [a0] (bound at tcfail008.hs:3:1)
     Note: there are several potential instances:
       instance Num Double -- Defined in `GHC.Float'
       instance Num Float -- Defined in `GHC.Float'
@@ -18,7 +18,6 @@ tcfail008.hs:3:5:
 
 tcfail008.hs:3:7:
     No instance for (Num [a0]) arising from the literal `2'
-    Possible fix: add an instance declaration for (Num [a0])
     In the second argument of `(:)', namely `2'
     In the expression: 1 : 2
     In an equation for `o': o = 1 : 2
index 5f22a3a..695655c 100644 (file)
@@ -1,7 +1,6 @@
 
 tcfail010.hs:3:17:
     No instance for (Num [t0]) arising from a use of `+'
-    Possible fix: add an instance declaration for (Num [t0])
     In the expression: z + 2
     In the expression: \ (y : z) -> z + 2
     In an equation for `q': q = \ (y : z) -> z + 2
index 439a663..a1fd433 100644 (file)
@@ -1,5 +1,6 @@
 
 tcfail013.hs:4:3:
-    Couldn't match expected type `[t0]' with actual type `Bool'
+    Couldn't match expected type `[t]' with actual type `Bool'
+    Relevant bindings include f :: [t] -> a (bound at tcfail013.hs:3:1)
     In the pattern: True
     In an equation for `f': f True = 2
index d46bf92..713ffce 100644 (file)
@@ -1,6 +1,9 @@
 
 tcfail014.hs:5:33:
-    Occurs check: cannot construct the infinite type: t1 = t1 -> t0
+    Occurs check: cannot construct the infinite type: t8 ~ t8 -> t7
+    Relevant bindings include
+      h :: (t8 -> t7) -> t7 (bound at tcfail014.hs:5:25)
+      z :: t8 -> t7 (bound at tcfail014.hs:5:27)
     In the first argument of `z', namely `z'
     In the expression: z z
     In an equation for `h': h z = z z
index 24affd7..41899df 100644 (file)
@@ -1,7 +1,5 @@
-\r
-tcfail015.hs:7:13:\r
-    No instance for (Num Bool)\r
-      arising from the literal `2'\r
-    Possible fix: add an instance declaration for (Num Bool)\r
-    In the expression: 2\r
-    In an equation for `g': g (ANull) = 2\r
+
+tcfail015.hs:7:13:
+    No instance for (Num Bool) arising from the literal `2'
+    In the expression: 2
+    In an equation for `g': g (ANull) = 2
index 6c1fa9c..17f2f16 100644 (file)
@@ -1,16 +1,24 @@
 
 tcfail016.hs:9:20:
-    Couldn't match type `(t0, Expr t0)' with `Expr t0'
-    Expected type: Expr t0
-      Actual type: AnnExpr t0
+    Couldn't match type `(t, Expr t)' with `Expr t'
+    Expected type: Expr t
+      Actual type: AnnExpr t
+    Relevant bindings include
+      g :: Expr t -> [[Char]] (bound at tcfail016.hs:8:1)
+      e1 :: AnnExpr t (bound at tcfail016.hs:9:8)
+      e2 :: AnnExpr t (bound at tcfail016.hs:9:11)
     In the first argument of `g', namely `e1'
     In the first argument of `(++)', namely `(g e1)'
     In the expression: (g e1) ++ (g e2)
 
 tcfail016.hs:9:28:
-    Couldn't match type `(t0, Expr t0)' with `Expr t0'
-    Expected type: Expr t0
-      Actual type: AnnExpr t0
+    Couldn't match type `(t, Expr t)' with `Expr t'
+    Expected type: Expr t
+      Actual type: AnnExpr t
+    Relevant bindings include
+      g :: Expr t -> [[Char]] (bound at tcfail016.hs:8:1)
+      e1 :: AnnExpr t (bound at tcfail016.hs:9:8)
+      e2 :: AnnExpr t (bound at tcfail016.hs:9:11)
     In the first argument of `g', namely `e2'
     In the second argument of `(++)', namely `(g e2)'
     In the expression: (g e1) ++ (g e2)
index 9ac3c7d..006ff73 100644 (file)
@@ -4,5 +4,4 @@ tcfail017.hs:10:10:
       arising from the superclasses of an instance declaration
     from the context (B a)
       bound by the instance declaration at tcfail017.hs:10:10-23
-    Possible fix: add an instance declaration for (C [a])
     In the instance declaration for `B [a]'
index 54df698..67b3cbb 100644 (file)
@@ -1,6 +1,5 @@
 
 tcfail018.hs:5:10:
     No instance for (Num [t0]) arising from the literal `1'
-    Possible fix: add an instance declaration for (Num [t0])
     In the expression: 1
     In a pattern binding: (a : []) = 1
index ac2178b..79ab411 100644 (file)
@@ -2,5 +2,4 @@
 tcfail019.hs:18:10:
     No instance for (B [a])
       arising from the superclasses of an instance declaration
-    Possible fix: add an instance declaration for (B [a])
     In the instance declaration for `D [a]'
index f15fd98..13ef851 100644 (file)
@@ -4,5 +4,4 @@ tcfail020.hs:10:10:
       arising from the superclasses of an instance declaration
     from the context (A a)
       bound by the instance declaration at tcfail020.hs:10:10-23
-    Possible fix: add an instance declaration for (A [a])
     In the instance declaration for `B [a]'
index cf83c56..d9cb862 100644 (file)
@@ -1,7 +1,5 @@
 
 tcfail029.hs:6:9:
-    No instance for (Ord Foo)
-      arising from a use of `>'
-    Possible fix: add an instance declaration for (Ord Foo)
+    No instance for (Ord Foo) arising from a use of `>'
     In the expression: x > Bar
     In an equation for `f': f x = x > Bar
index 8cb4c1b..5a93f8c 100644 (file)
@@ -1,14 +1,12 @@
 
 tcfail032.hs:14:8:
-    Could not deduce (t ~ (a1 -> Int))
-    from the context (Eq a)
-      bound by the inferred type of f :: Eq a => t -> a -> Int
-      at tcfail032.hs:14:1-31
-    or from (Eq a1)
-      bound by an expression type signature: Eq a1 => a1 -> Int
+    Couldn't match expected type `a1 -> Int' with actual type `t'
+      because type variable `a1' would escape its scope
+    This (rigid, skolem) type variable is bound by
+      an expression type signature: Eq a1 => a1 -> Int
       at tcfail032.hs:14:8-30
-      `t' is a rigid type variable bound by
-          the inferred type of f :: Eq a => t -> a -> Int
-          at tcfail032.hs:14:1
+    Relevant bindings include
+      f :: t -> a -> Int (bound at tcfail032.hs:14:1)
+      x :: t (bound at tcfail032.hs:14:3)
     In the expression: (x :: Eq a => a -> Int)
     In an equation for `f': f x = (x :: Eq a => a -> Int)
index 826ad46..5382284 100644 (file)
@@ -1,6 +1,10 @@
 
 tcfail033.hs:4:12:
-    Occurs check: cannot construct the infinite type: t0 = (t0, t1)
+    Occurs check: cannot construct the infinite type: t ~ (t, t1)
+    Relevant bindings include
+      buglet :: [(t, t1)] (bound at tcfail033.hs:4:1)
+      x :: t (bound at tcfail033.hs:4:17)
+      y :: t1 (bound at tcfail033.hs:4:19)
     In the expression: x
     In the expression: [x | (x, y) <- buglet]
     In an equation for `buglet': buglet = [x | (x, y) <- buglet]
index 3e52e69..6067500 100644 (file)
@@ -2,10 +2,13 @@
 tcfail043.hs:38:17:
     No instance for (Ord_ a0) arising from a use of `gt'
     The type variable `a0' is ambiguous
-    Possible cause: the monomorphism restriction applied to the following:
-      search :: a0 -> [a0] -> Bool (bound at tcfail043.hs:37:1)
+    Possible cause: the monomorphism restriction applied to: `search'
     Probable fix: give these definition(s) an explicit type signature
                   or use -XNoMonomorphismRestriction
+    Relevant bindings include
+      search :: a0 -> [a0] -> Bool (bound at tcfail043.hs:37:1)
+      a :: a0 (bound at tcfail043.hs:38:6)
+      bs :: [a0] (bound at tcfail043.hs:38:8)
     Note: there is a potential instance available:
       instance Ord_ Int -- Defined at tcfail043.hs:34:10
     In the expression: gt (hd bs) a
@@ -24,10 +27,13 @@ tcfail043.hs:38:17:
 tcfail043.hs:40:25:
     No instance for (Eq_ a0) arising from a use of `eq'
     The type variable `a0' is ambiguous
-    Possible cause: the monomorphism restriction applied to the following:
-      search :: a0 -> [a0] -> Bool (bound at tcfail043.hs:37:1)
+    Possible cause: the monomorphism restriction applied to: `search'
     Probable fix: give these definition(s) an explicit type signature
                   or use -XNoMonomorphismRestriction
+    Relevant bindings include
+      search :: a0 -> [a0] -> Bool (bound at tcfail043.hs:37:1)
+      a :: a0 (bound at tcfail043.hs:38:6)
+      bs :: [a0] (bound at tcfail043.hs:38:8)
     Note: there are several potential instances:
       instance Eq_ a => Eq_ [a] -- Defined at tcfail043.hs:23:10
       instance Eq_ Int -- Defined at tcfail043.hs:20:10
index 1b668d0..e3a8f16 100644 (file)
@@ -3,16 +3,14 @@ tcfail046.hs:10:50:
     No instance for (Eq (Process a))
       arising from the 'deriving' clause of a data type declaration
     Possible fix:
-      add an instance declaration for (Eq (Process a))
-      or use a standalone 'deriving instance' declaration,
-           so you can specify the instance context yourself
+      use a standalone 'deriving instance' declaration,
+        so you can specify the instance context yourself
     When deriving the instance for (Eq (Continuation a))
 
 tcfail046.hs:22:25:
     No instance for (Eq (Process a))
       arising from the 'deriving' clause of a data type declaration
     Possible fix:
-      add an instance declaration for (Eq (Process a))
-      or use a standalone 'deriving instance' declaration,
-           so you can specify the instance context yourself
+      use a standalone 'deriving instance' declaration,
+        so you can specify the instance context yourself
     When deriving the instance for (Eq (Message a))
index fbe7e54..c680e82 100644 (file)
@@ -1,11 +1,14 @@
-\r
-tcfail065.hs:29:20:\r
-    Couldn't match expected type `x' with actual type `x1'\r
-      `x' is a rigid type variable bound by\r
-          the instance declaration at tcfail065.hs:28:10\r
-      `x1' is a rigid type variable bound by\r
-           the type signature for setX :: x1 -> X x -> X x\r
-           at tcfail065.hs:29:3\r
-    In the first argument of `X', namely `x'\r
-    In the expression: X x\r
-    In an equation for `setX': setX x (X _) = X x\r
+
+tcfail065.hs:29:20:
+    Couldn't match expected type `x' with actual type `x1'
+      `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:10
+    Relevant bindings include
+      setX :: x1 -> X x -> X x (bound at tcfail065.hs:29:3)
+      x :: x1 (bound at tcfail065.hs:29:8)
+    In the first argument of `X', namely `x'
+    In the expression: X x
+    In an equation for `setX': setX x (X _) = X x
index bf6e144..687c8ea 100644 (file)
-\r
-tcfail068.hs:14:9:\r
-    Could not deduce (s1 ~ s)\r
-    from the context (Constructed a)\r
-      bound by the type signature for\r
-                 itgen :: Constructed a => (Int, Int) -> a -> IndTree s a\r
-      at tcfail068.hs:11:10-55\r
-      `s1' is a rigid type variable bound by\r
-           a type expected by the context: GHC.ST.ST s1 (IndTree s a)\r
-           at tcfail068.hs:13:9\r
-      `s' is a rigid type variable bound by\r
-          the type signature for\r
-            itgen :: Constructed a => (Int, Int) -> a -> IndTree s a\r
-          at tcfail068.hs:11:10\r
-    Expected type: GHC.ST.ST s1 (IndTree s a)\r
-      Actual type: GHC.ST.ST s1 (STArray s1 (Int, Int) a)\r
-    In the return type of a call of `newSTArray'\r
-    In the first argument of `runST', namely\r
-      `(newSTArray ((1, 1), n) x)'\r
-    In the expression: runST (newSTArray ((1, 1), n) x)\r
-\r
-tcfail068.hs:19:21:\r
-    Could not deduce (s ~ s1)\r
-    from the context (Constructed a)\r
-      bound by the type signature for\r
-                 itiap :: Constructed a =>\r
-                          (Int, Int) -> (a -> a) -> IndTree s a -> IndTree s a\r
-      at tcfail068.hs:16:10-75\r
-      `s' is a rigid type variable bound by\r
-          the type signature for\r
-            itiap :: Constructed a =>\r
-                     (Int, Int) -> (a -> a) -> IndTree s a -> IndTree s a\r
-          at tcfail068.hs:16:10\r
-      `s1' is a rigid type variable bound by\r
-           a type expected by the context: GHC.ST.ST s1 (IndTree s a)\r
-           at tcfail068.hs:18:9\r
-    Expected type: STArray s1 (Int, Int) a\r
-      Actual type: IndTree s a\r
-    In the first argument of `readSTArray', namely `arr'\r
-    In the first argument of `(>>=)', namely `readSTArray arr i'\r
-    In the first argument of `runST', namely\r
-      `(readSTArray arr i\r
-        >>= \ val -> writeSTArray arr i (f val) >> return arr)'\r
-\r
-tcfail068.hs:24:35:\r
-    Could not deduce (s ~ s1)\r
-    from the context (Constructed a)\r
-      bound by the type signature for\r
-                 itrap :: Constructed a =>\r
-                          ((Int, Int), (Int, Int)) -> (a -> a) -> IndTree s a -> IndTree s a\r
-      at tcfail068.hs:23:10-87\r
-      `s' is a rigid type variable bound by\r
-          the type signature for\r
-            itrap :: Constructed a =>\r
-                     ((Int, Int), (Int, Int)) -> (a -> a) -> IndTree s a -> IndTree s a\r
-          at tcfail068.hs:23:10\r
-      `s1' is a rigid type variable bound by\r
-           a type expected by the context: GHC.ST.ST s1 (IndTree s a)\r
-           at tcfail068.hs:24:29\r
-    Expected type: GHC.ST.ST s1 (IndTree s a)\r
-      Actual type: GHC.ST.ST s (IndTree s a)\r
-    In the return type of a call of itrap'\r
-    In the first argument of `runST', namely `(itrap' i k)'\r
-    In the expression: runST (itrap' i k)\r
-\r
-tcfail068.hs:36:46:\r
-    Could not deduce (s ~ s1)\r
-    from the context (Constructed b)\r
-      bound by the type signature for\r
-                 itrapstate :: Constructed b =>\r
-                               ((Int, Int), (Int, Int))\r
-                               -> (a -> b -> (a, b))\r
-                               -> ((Int, Int) -> c -> a)\r
-                               -> (a -> c)\r
-                               -> c\r
-                               -> IndTree s b\r
-                               -> (c, IndTree s b)\r
-      at tcfail068.hs:(34,15)-(35,62)\r
-      `s' is a rigid type variable bound by\r
-          the type signature for\r
-            itrapstate :: Constructed b =>\r
-                          ((Int, Int), (Int, Int))\r
-                          -> (a -> b -> (a, b))\r
-                          -> ((Int, Int) -> c -> a)\r
-                          -> (a -> c)\r
-                          -> c\r
-                          -> IndTree s b\r
-                          -> (c, IndTree s b)\r
-          at tcfail068.hs:34:15\r
-      `s1' is a rigid type variable bound by\r
-           a type expected by the context: GHC.ST.ST s1 (c, IndTree s b)\r
-           at tcfail068.hs:36:40\r
-    Expected type: GHC.ST.ST s1 (c, IndTree s b)\r
-      Actual type: GHC.ST.ST s (c, IndTree s b)\r
-    In the return type of a call of itrapstate'\r
-    In the first argument of `runST', namely `(itrapstate' i k s)'\r
-    In the expression: runST (itrapstate' i k s)\r
+
+tcfail068.hs:14:9:
+    Could not deduce (s1 ~ s)
+    from the context (Constructed a)
+      bound by the type signature for
+                 itgen :: Constructed a => (Int, Int) -> a -> IndTree s a
+      at tcfail068.hs:11:10-55
+      `s1' is a rigid type variable bound by
+           a type expected by the context: GHC.ST.ST s1 (IndTree s a)
+           at tcfail068.hs:13:9
+      `s' is a rigid type variable bound by
+          the type signature for
+            itgen :: Constructed a => (Int, Int) -> a -> IndTree s a
+          at tcfail068.hs:11:10
+    Expected type: GHC.ST.ST s1 (IndTree s a)
+      Actual type: GHC.ST.ST s1 (STArray s1 (Int, Int) a)
+    Relevant bindings include
+      itgen :: (Int, Int) -> a -> IndTree s a
+        (bound at tcfail068.hs:12:1)
+    In the return type of a call of `newSTArray'
+    In the first argument of `runST', namely
+      `(newSTArray ((1, 1), n) x)'
+    In the expression: runST (newSTArray ((1, 1), n) x)
+
+tcfail068.hs:19:21:
+    Could not deduce (s ~ s1)
+    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:16:10-75
+      `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:16:10
+      `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
+    Relevant bindings include
+      itiap :: (Int, Int) -> (a -> a) -> IndTree s a -> IndTree s a
+        (bound at tcfail068.hs:17:1)
+      arr :: IndTree s a (bound at tcfail068.hs:17:11)
+    In the first argument of `readSTArray', namely `arr'
+    In the first argument of `(>>=)', namely `readSTArray arr i'
+    In the first argument of `runST', namely
+      `(readSTArray arr i
+        >>= \ val -> writeSTArray arr i (f val) >> return arr)'
+
+tcfail068.hs:24:35:
+    Could not deduce (s ~ s1)
+    from the context (Constructed a)
+      bound by the type signature for
+                 itrap :: Constructed a =>
+                          ((Int, Int), (Int, Int)) -> (a -> a) -> IndTree s a -> IndTree s a
+      at tcfail068.hs:23:10-87
+      `s' is a rigid type variable bound by
+          the type signature for
+            itrap :: Constructed a =>
+                     ((Int, Int), (Int, Int)) -> (a -> a) -> IndTree s a -> IndTree s a
+          at tcfail068.hs:23:10
+      `s1' is a rigid type variable bound by
+           a type expected by the context: GHC.ST.ST s1 (IndTree s a)
+           at tcfail068.hs:24:29
+    Expected type: GHC.ST.ST s1 (IndTree s a)
+      Actual type: GHC.ST.ST s (IndTree s a)
+    Relevant bindings include
+      itrap :: ((Int, Int), (Int, Int))
+               -> (a -> a) -> IndTree s a -> IndTree s a
+        (bound at tcfail068.hs:24:1)
+      arr :: IndTree s a (bound at tcfail068.hs:24:23)
+      itrapsnd :: Int -> Int -> GHC.ST.ST s (IndTree s a)
+        (bound at tcfail068.hs:29:9)
+      itrap' :: Int -> Int -> GHC.ST.ST s (IndTree s a)
+        (bound at tcfail068.hs:26:9)
+    In the return type of a call of itrap'
+    In the first argument of `runST', namely `(itrap' i k)'
+    In the expression: runST (itrap' i k)
+
+tcfail068.hs:36:46:
+    Could not deduce (s ~ s1)
+    from the context (Constructed b)
+      bound by the type signature for
+                 itrapstate :: Constructed b =>
+                               ((Int, Int), (Int, Int))
+                               -> (a -> b -> (a, b))
+                               -> ((Int, Int) -> c -> a)
+                               -> (a -> c)
+                               -> c
+                               -> IndTree s b
+                               -> (c, IndTree s b)
+      at tcfail068.hs:(34,15)-(35,62)
+      `s' is a rigid type variable bound by
+          the type signature for
+            itrapstate :: Constructed b =>
+                          ((Int, Int), (Int, Int))
+                          -> (a -> b -> (a, b))
+                          -> ((Int, Int) -> c -> a)
+                          -> (a -> c)
+                          -> c
+                          -> IndTree s b
+                          -> (c, IndTree s b)
+          at tcfail068.hs:34:15
+      `s1' is a rigid type variable bound by
+           a type expected by the context: GHC.ST.ST s1 (c, IndTree s b)
+           at tcfail068.hs:36:40
+    Expected type: GHC.ST.ST s1 (c, IndTree s b)
+      Actual type: GHC.ST.ST s (c, IndTree s b)
+    Relevant bindings include
+      itrapstate :: ((Int, Int), (Int, Int))
+                    -> (a -> b -> (a, b))
+                    -> ((Int, Int) -> c -> a)
+                    -> (a -> c)
+                    -> c
+                    -> IndTree s b
+                    -> (c, IndTree s b)
+        (bound at tcfail068.hs:36:1)
+      arr :: IndTree s b (bound at tcfail068.hs:36:34)
+      itrapstatesnd :: Int -> Int -> c -> GHC.ST.ST s (c, IndTree s b)
+        (bound at tcfail068.hs:41:9)
+      itrapstate' :: Int -> Int -> c -> GHC.ST.ST s (c, IndTree s b)
+        (bound at tcfail068.hs:38:9)
+    In the return type of a call of itrapstate'
+    In the first argument of `runST', namely `(itrapstate' i k s)'
+    In the expression: runST (itrapstate' i k s)
index 4ca4cf4..5e8361a 100644 (file)
@@ -9,6 +9,9 @@ tcfail076.hs:18:82:
              at tcfail076.hs:18:64
     Expected type: m res1
       Actual type: m res
+    Relevant bindings include
+      cont :: a -> m res (bound at tcfail076.hs:18:37)
+      cont' :: b -> m res1 (bound at tcfail076.hs:18:73)
     In the return type of a call of `cont'
     In the expression: cont a
     In the first argument of `KContT', namely `(\ cont' -> cont a)'
index 77794ff..589d2c9 100644 (file)
@@ -5,3 +5,17 @@ tcfail083.hs:8:39:
     In the pattern: State {bar = Bar {flag = f, baz = b}}
     In an equation for `display':
         display (State {bar = Bar {flag = f, baz = b}}) = print (f, b)
+
+tcfail083.hs:8:53:
+    No instance for (Show t0) arising from a use of `print'
+    The type variable `t0' is ambiguous
+    Possible fix: add a type signature that fixes these type variable(s)
+    Relevant bindings include b :: t0 (bound at tcfail083.hs:8:45)
+    Note: there are several potential instances:
+      instance Show Bar -- Defined at tcfail083.hs:3:43
+      instance Show Double -- Defined in `GHC.Float'
+      instance Show Float -- Defined in `GHC.Float'
+      ...plus 24 others
+    In the expression: print (f, b)
+    In an equation for `display':
+        display (State {bar = Bar {flag = f, baz = b}}) = print (f, b)
index f63d96e..3096b22 100644 (file)
@@ -1,7 +1,7 @@
 
 tcfail090.hs:8:9:
-    Couldn't match kind `*' against `#'
-    Kind incompatibility when matching types:
+    Couldn't match kind `*' with `#'
+    When matching types
       a0 :: *
       ByteArray# :: #
     In the expression: undefined
index aa7eb99..4553125 100644 (file)
@@ -1,13 +1,16 @@
 
 tcfail099.hs:9:20:
     Couldn't match expected type `a' with actual type `t'
-      `a' is a rigid type variable bound by
-          a pattern with constructor
-            C :: forall a. (a -> Int) -> DS,
-          in an equation for `call'
-          at tcfail099.hs:9:7
-      `t' is a rigid type variable bound by
-          the inferred type of call :: DS -> t -> Int at tcfail099.hs:9:1
+      because type variable `a' would escape its scope
+    This (rigid, skolem) type variable is bound by
+      a pattern with constructor
+        C :: forall a. (a -> Int) -> DS,
+      in an equation for `call'
+      at tcfail099.hs:9:7-9
+    Relevant bindings include
+      call :: DS -> t -> Int (bound at tcfail099.hs:9:1)
+      f :: a -> Int (bound at tcfail099.hs:9:9)
+      arg :: t (bound at tcfail099.hs:9:12)
     In the first argument of `f', namely `arg'
     In the expression: f arg
     In an equation for `call': call (C f) arg = f arg
index 4c651bf..516734b 100644 (file)
@@ -8,7 +8,6 @@ tcfail102.hs:9:15:
       bound by the type signature for
                  f :: Integral a => P (Ratio a) -> P (Ratio a)
       at tcfail102.hs:8:6-45
-    Possible fix: add an instance declaration for (Integral (Ratio a))
     In the `p' field of a record
     In the expression: x {p = p x}
     In an equation for `f': f x = x {p = p x}
index 134f36f..ea873e6 100644 (file)
@@ -1,12 +1,16 @@
-\r
-tcfail103.hs:15:23:\r
-    Couldn't match type `t' with `s'\r
-      `t' is a rigid type variable bound by\r
-          the type signature for f :: ST t Int at tcfail103.hs:10:5\r
-      `s' is a rigid type variable bound by\r
-          the type signature for g :: ST s Int at tcfail103.hs:13:14\r
-    Expected type: STRef s Int\r
-      Actual type: STRef t Int\r
-    In the first argument of `readSTRef', namely `v'\r
-    In the expression: readSTRef v\r
-    In an equation for `g': g = readSTRef v\r
+
+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:10:5
+      `s' is a rigid type variable bound by
+          the type signature for g :: ST s Int at tcfail103.hs:13:14
+    Expected type: STRef s Int
+      Actual type: STRef t Int
+    Relevant bindings include
+      f :: ST t Int (bound at tcfail103.hs:11:1)
+      v :: STRef t Int (bound at tcfail103.hs:12:5)
+      g :: ST s Int (bound at tcfail103.hs:15:9)
+    In the first argument of `readSTRef', namely `v'
+    In the expression: readSTRef v
+    In an equation for `g': g = readSTRef v
index 09c0976..b08c7df 100644 (file)
@@ -2,5 +2,4 @@
 tcfail106.hs:14:10:
     No instance for (S Int)
       arising from the superclasses of an instance declaration
-    Possible fix: add an instance declaration for (S Int)
     In the instance declaration for `D Int'
index a72c623..5455815 100644 (file)
@@ -2,5 +2,4 @@
 tcfail109.hs:16:10:
     No instance for (Eq Stupid)
       arising from the superclasses of an instance declaration
-    Possible fix: add an instance declaration for (Eq Stupid)
     In the instance declaration for `Collects Bool Stupid'
index 7002ee0..d083321 100644 (file)
@@ -1,11 +1,17 @@
 
 tcfail122.hs:8:9:
-    Couldn't match kind `* -> *' against `*'
-    Kind incompatibility when matching types:
-      c0 :: (* -> *) -> *
-      a0 :: * -> *
+    Couldn't match kind `* -> *' with `*'
+    When matching types
+      d0 :: * -> *
+      b :: *
+    Expected type: a b
+      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]
+    In an equation for `foo':
+        foo
+          = [undefined :: forall a b. a b,
+             undefined :: forall (c :: (* -> *) -> *) (d :: * -> *). c d]
index 8e91bbe..6a33eb7 100644 (file)
@@ -8,4 +8,5 @@ module ShouldFail where
 
 f x = True
 
-h v = (f 3#, f 4.3#, f True)
+h v = f 3#
+-- h v = (f 3#, f 4.3#, f True)
index b7ec97f..1ca291f 100644 (file)
@@ -1,8 +1,9 @@
 
-tcfail123.hs:11:10:
-    Couldn't match kind `*' against `#'
-    Kind incompatibility when matching types:
+tcfail123.hs:11:9:
+    Couldn't match kind `*' with `#'
+    When matching types
       t0 :: *
       GHC.Prim.Int# :: #
     In the first argument of `f', namely `3#'
     In the expression: f 3#
+    In an equation for `h': h v = f 3#
index 0834cc2..265b783 100644 (file)
@@ -7,9 +7,6 @@ tcfail128.hs:18:16:
     Note: there is a potential instance available:
       instance Data.Array.Base.MArray GHC.IOArray.IOArray e IO
         -- Defined in `Data.Array.Base'
-    Possible fix:
-      add an instance declaration for
-      (Data.Array.Base.MArray b0 FlatVector IO)
     In a stmt of a 'do' block: v <- thaw tmp
     In the expression:
       do { let sL = ...
index 785801a..db2a954 100644 (file)
@@ -1,11 +1,14 @@
-\r
-tcfail131.hs:7:9:\r
-    Could not deduce (b ~ Integer)\r
-    from the context (Num b)\r
-      bound by the type signature for g :: Num b => b -> b\r
-      at tcfail131.hs:6:8-22\r
-      `b' is a rigid type variable bound by\r
-          the type signature for g :: Num b => b -> b at tcfail131.hs:6:8\r
-    In the return type of a call of `f'\r
-    In the expression: f x x\r
-    In an equation for `g': g x = f x x\r
+
+tcfail131.hs:7:9:
+    Could not deduce (b ~ Integer)
+    from the context (Num b)
+      bound by the type signature for g :: Num b => b -> b
+      at tcfail131.hs:6:8-22
+      `b' is a rigid type variable bound by
+          the type signature for g :: Num b => b -> b at tcfail131.hs:6:8
+    Relevant bindings include
+      g :: b -> b (bound at tcfail131.hs:7:3)
+      x :: b (bound at tcfail131.hs:7:5)
+    In the return type of a call of `f'
+    In the expression: f x x
+    In an equation for `g': g x = f x x
index 08c9b97..ed65b28 100644 (file)
@@ -3,8 +3,8 @@ tcfail133.hs:2:61: Warning:
     -XDatatypeContexts is deprecated: It was widely considered a misfeature, and has been removed from the Haskell language.
 
 tcfail133.hs:68:7:
-    No instance for (Show a0) arising from a use of `show'
-    The type variable `a0' is ambiguous
+    No instance for (Show t0) arising from a use of `show'
+    The type variable `t0' is ambiguous
     Possible fix: add a type signature that fixes these type variable(s)
     Note: there are several potential instances:
       instance Show Zero -- Defined at tcfail133.hs:8:29
@@ -18,11 +18,8 @@ tcfail133.hs:68:7:
         foo = show $ add (One :@ Zero) (One :@ One)
 
 tcfail133.hs:68:14:
-    No instance for (AddDigit (Zero :@ (One :@ One)) One a0)
+    No instance for (AddDigit (Zero :@ (One :@ One)) One t0)
       arising from a use of `add'
-    Possible fix:
-      add an instance declaration for
-      (AddDigit (Zero :@ (One :@ One)) One a0)
     In the second argument of `($)', namely
       `add (One :@ Zero) (One :@ One)'
     In the expression: show $ add (One :@ Zero) (One :@ One)
index 9cbe69b..b84fff1 100644 (file)
@@ -1,10 +1,8 @@
 
-tcfail137.hs:1:14:
-    Warning: -XDatatypeContexts is deprecated: It was widely considered a misfeature, and has been removed from the Haskell language.
+tcfail137.hs:1:14: Warning:
+    -XDatatypeContexts is deprecated: It was widely considered a misfeature, and has been removed from the Haskell language.
 
 tcfail137.hs:8:5:
-    No instance for (Floating Bool)
-      arising from a use of `Test'
-    Possible fix: add an instance declaration for (Floating Bool)
+    No instance for (Floating Bool) arising from a use of `Test'
     In the expression: Test [False, True]
     In an equation for `x': x = Test [False, True]
index f24a2a7..0d9cd34 100644 (file)
@@ -1,20 +1,26 @@
 
 tcfail140.hs:10:7:
-    Couldn't match expected type `a0 -> t0' with actual type `Int'
+    Couldn't match expected type `Integer -> t' with actual type `Int'
+    Relevant bindings include bar :: t (bound at tcfail140.hs:10:1)
     The function `f' is applied to two arguments,
     but its type `Int -> Int' has only one
     In the expression: f 3 9
     In an equation for `bar': bar = f 3 9
 
 tcfail140.hs:12:10:
-    Couldn't match expected type `a0 -> t0' with actual type `Int'
+    Couldn't match expected type `Integer -> t1' with actual type `Int'
+    Relevant bindings include
+      rot :: t -> t1 (bound at tcfail140.hs:12:1)
     The operator `f' takes two arguments,
     but its type `Int -> Int' has only one
     In the expression: 3 `f` 4
     In an equation for `rot': rot xs = 3 `f` 4
 
 tcfail140.hs:14:15:
-    Couldn't match expected type `a0 -> b0' with actual type `Int'
+    Couldn't match expected type `a -> b' with actual type `Int'
+    Relevant bindings include
+      bot :: [a] -> [b] (bound at tcfail140.hs:14:1)
+      xs :: [a] (bound at tcfail140.hs:14:5)
     The operator `f' takes two arguments,
     but its type `Int -> Int' has only one
     In the first argument of `map', namely `(3 `f`)'
index 200df0b..2647156 100644 (file)
@@ -5,6 +5,9 @@ tcfail153.hs:6:7:
           the type signature for f :: a -> [a] at tcfail153.hs:5:6
     Expected type: [a]
       Actual type: [Bool]
+    Relevant bindings include
+      f :: a -> [a] (bound at tcfail153.hs:6:1)
+      x :: a (bound at tcfail153.hs:6:3)
     In the return type of a call of `g'
     In the expression: g x
     In an equation for `f':
index c809e39..3576c7e 100644 (file)
@@ -1,8 +1,9 @@
 
 tcfail159.hs:9:11:
-    Couldn't match kind `*' against `#'
-    Kind incompatibility when matching types:
+    Couldn't match kind `*' with `#'
+    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 cfe63c0..1e0262d 100644 (file)
@@ -3,7 +3,6 @@ tcfail169.hs:7:51:
     No instance for (Show (Succ a))
       arising from the 'deriving' clause of a data type declaration
     Possible fix:
-      add an instance declaration for (Show (Succ a))
-      or use a standalone 'deriving instance' declaration,
-           so you can specify the instance context yourself
+      use a standalone 'deriving instance' declaration,
+        so you can specify the instance context yourself
     When deriving the instance for (Show (Seq a))
index c4fb525..d093e32 100644 (file)
@@ -1,31 +1,7 @@
-\r
-tcfail174.hs:9:10:\r
-    Couldn't match expected type `forall a. a -> a'\r
-                with actual type `a0 -> a0'\r
-    In the first argument of `Base', namely `id'\r
-    In the expression: Base id\r
-    In an equation for `g': g = Base id\r
-\r
-tcfail174.hs:13:14:\r
-    Couldn't match type `a' with `a1'\r
-      `a' is a rigid type variable bound by\r
-          the inferred type of h1 :: Capture a at tcfail174.hs:13:1\r
-      `a1' is a rigid type variable bound by\r
-           the type forall a1. a1 -> a1 at tcfail174.hs:13:14\r
-    Expected type: Capture (forall x. x -> a)\r
-      Actual type: Capture (forall a. a -> a)\r
-    In the first argument of `Capture', namely `g'\r
-    In the expression: Capture g\r
-    In an equation for `h1': h1 = Capture g\r
-\r
-tcfail174.hs:16:14:\r
-    Couldn't match type `a' with `b'\r
-      `a' is a rigid type variable bound by\r
-          the type forall a. a -> a at tcfail174.hs:16:14\r
-      `b' is a rigid type variable bound by\r
-          the type signature for h2 :: Capture b at tcfail174.hs:15:7\r
-    Expected type: Capture (forall x. x -> b)\r
-      Actual type: Capture (forall a. a -> a)\r
-    In the first argument of `Capture', namely `g'\r
-    In the expression: Capture g\r
-    In an equation for `h2': h2 = Capture g\r
+
+tcfail174.hs:9:10:
+    Couldn't match expected type `forall a. a -> a'
+                with actual type `a0 -> a0'
+    In the first argument of `Base', namely `id'
+    In the expression: Base id
+    In an equation for `g': g = Base id
index 797b701..65f4cb9 100644 (file)
@@ -1,8 +1,10 @@
-\r
-tcfail175.hs:11:1:\r
-    Couldn't match expected type `a'\r
-                with actual type `String -> String -> String'\r
-      `a' is a rigid type variable bound by\r
-          the type signature for evalRHS :: Int -> a at tcfail175.hs:10:12\r
-    The equation(s) for `evalRHS' have three arguments,\r
-    but its type `Int -> a' has only one\r
+
+tcfail175.hs:11:1:
+    Couldn't match expected type `String -> String -> String'
+                with actual type `a'
+      `a' is a rigid type variable bound by
+          the type signature for evalRHS :: Int -> a at tcfail175.hs:10:12
+    Relevant bindings include
+      evalRHS :: Int -> a (bound at tcfail175.hs:11:1)
+    The equation(s) for `evalRHS' have three arguments,
+    but its type `Int -> a' has only one
index 66773a2..b0b6360 100644 (file)
@@ -1,14 +1,16 @@
 
 tcfail178.hs:15:7:
-    Couldn't match type `()' with `[a0]'
-    Expected type: Bool -> [a0]
+    Couldn't match type `()' with `[a]'
+    Expected type: Bool -> [a]
       Actual type: Bool -> ()
+    Relevant bindings include c :: [a] (bound at tcfail178.hs:15:1)
     In the first argument of `a', namely `y'
     In the expression: a y
     In an equation for `c': c = a y
 
 tcfail178.hs:18:7:
-    Couldn't match expected type `Bool -> [a0]' with actual type `()'
+    Couldn't match expected type `Bool -> [a]' with actual type `()'
+    Relevant bindings include d :: [a] (bound at tcfail178.hs:18:1)
     In the first argument of `a', namely `()'
     In the expression: a ()
     In an equation for `d': d = a ()
index 4962c8a..ed0325a 100644 (file)
@@ -1,13 +1,18 @@
-\r
-tcfail179.hs:14:39:\r
-    Couldn't match expected type `s' with actual type `x'\r
-      `s' is a rigid type variable bound by\r
-          the type signature for run :: T s -> Int at tcfail179.hs:12:8\r
-      `x' is a rigid type variable bound by\r
-          a pattern with constructor\r
-            T :: forall s x. (s -> (x -> s) -> (x, s, Int)) -> T s,\r
-          in a case alternative\r
-          at tcfail179.hs:14:14\r
-    In the first argument of `g', namely `x'\r
-    In the expression: g x id\r
-    In a pattern binding: (x, _, b) = g x id\r
+
+tcfail179.hs:14:39:
+    Couldn't match expected type `s' with actual type `x'
+      `x' is a rigid type variable bound by
+          a pattern with constructor
+            T :: forall s x. (s -> (x -> s) -> (x, s, Int)) -> T s,
+          in a case alternative
+          at tcfail179.hs:14:14
+      `s' is a rigid type variable bound by
+          the type signature for run :: T s -> Int at tcfail179.hs:12:8
+    Relevant bindings include
+      run :: T s -> Int (bound at tcfail179.hs:13:1)
+      ts :: T s (bound at tcfail179.hs:13:5)
+      g :: s -> (x -> s) -> (x, s, Int) (bound at tcfail179.hs:14:16)
+      x :: x (bound at tcfail179.hs:14:26)
+    In the first argument of `g', namely `x'
+    In the expression: g x id
+    In a pattern binding: (x, _, b) = g x id
index d6b97af..e021987 100644 (file)
@@ -2,5 +2,7 @@
 tcfail182.hs:9:3:
     Couldn't match expected type `Prelude.Maybe a'
                 with actual type `Maybe t0'
+    Relevant bindings include
+      f :: Prelude.Maybe a -> Int (bound at tcfail182.hs:9:1)
     In the pattern: Foo
     In an equation for `f': f Foo = 3
index 6364cc2..0e95356 100644 (file)
@@ -1,7 +1,7 @@
 
 tcfail189.hs:10:31:
-    Couldn't match type `[a0]' with `a -> a1'
-    Expected type: (a -> a1) -> [a] -> [[a]]
+    Couldn't match type `[a0]' with `a -> Integer'
+    Expected type: (a -> Integer) -> [a] -> [[a]]
       Actual type: [a0] -> [a0]
     In the return type of a call of `take'
     Probable cause: `take' is applied to too many arguments
index a6469e7..db2d842 100644 (file)
@@ -1,8 +1,6 @@
 
 tcfail190.hs:14:31:
-    No instance for (Ord Unorderable)
-      arising from a use of `groupWith'
-    Possible fix: add an instance declaration for (Ord Unorderable)
+    No instance for (Ord Unorderable) arising from a use of `groupWith'
     In the expression: groupWith
     In a stmt of a list comprehension: then group by x using groupWith
     In the expression:
index 3491219..caf7ef1 100644 (file)
@@ -1,14 +1,4 @@
 
-tcfail192.hs:8:11:
-    No instance for (Num [[Char]])
-      arising from a use of `+'
-    Possible fix: add an instance declaration for (Num [[Char]])
-    In the expression: x + 1
-    In the expression:
-      [x + 1 | x <- ["Hello", "World"], then group using take 5]
-    In an equation for `foo':
-        foo = [x + 1 | x <- ["Hello", "World"], then group using take 5]
-
 tcfail192.hs:10:26:
     Couldn't match type `a' with `[a]'
       `a' is a rigid type variable bound by
index 620fa75..7190a88 100644 (file)
@@ -1,9 +1,10 @@
-\r
-tcfail194.hs:9:29:\r
-    Couldn't match type `[a0]' with `a -> t0'\r
-    Expected type: (a -> t0) -> [a] -> [a]\r
-      Actual type: [a0] -> [a0]\r
-    In the return type of a call of `take'\r
-    Probable cause: `take' is applied to too many arguments\r
-    In the expression: take 5\r
-    In a stmt of a list comprehension: then take 5 by x\r
+
+tcfail194.hs:9:29:
+    Couldn't match type `[a0]' with `a -> t'
+    Expected type: (a -> t) -> [a] -> [a]
+      Actual type: [a0] -> [a0]
+    Relevant bindings include z :: [t] (bound at tcfail194.hs:9:1)
+    In the return type of a call of `take'
+    Probable cause: `take' is applied to too many arguments
+    In the expression: take 5
+    In a stmt of a list comprehension: then take 5 by x
index bba1390..22a09f5 100644 (file)
@@ -1,10 +1,14 @@
 
 tcfail198.hs:6:36:
     Couldn't match expected type `a1' with actual type `a'
-      `a1' is a rigid type variable bound by
-           an expression type signature: a1 at tcfail198.hs:6:36
-      `a' is a rigid type variable bound by
-          the inferred type of f3 :: [a] -> [a] at tcfail198.hs:6:1
+      because type variable `a1' would escape its scope
+    This (rigid, skolem) type variable is bound by
+      an expression type signature: a1
+      at tcfail198.hs:6:36-41
+    Relevant bindings include
+      f3 :: [a] -> [a] (bound at tcfail198.hs:6:6)
+      x :: a (bound at tcfail198.hs:6:19)
+      xs :: [a] (bound at tcfail198.hs:6:21)
     In the expression: x :: a
     In the second argument of `(++)', namely `[x :: a]'
     In the expression: xs ++ [x :: a]
index c75dc8f..731f906 100644 (file)
@@ -1,8 +1,9 @@
 
 tcfail200.hs:5:15:
-    Couldn't match kind `*' against `#'
-    Kind incompatibility when matching types:
-      t0 :: *
+    Couldn't match kind `*' with `#'
+    When matching types
+      t1 :: *
       GHC.Prim.Int# :: #
     In the expression: 1#
     In the expression: (1#, 'c')
+    In an equation for `x': x = (1#, 'c')
index 6a60b9f..4d93f9f 100644 (file)
@@ -6,6 +6,11 @@ tcfail201.hs:17:27:
             gfoldl' :: (forall a1 b. c (a1 -> b) -> a1 -> c b)
                        -> (forall g. g -> c g) -> a -> c a
           at tcfail201.hs:15:12
+    Relevant bindings include
+      gfoldl' :: (forall a1 b. c (a1 -> b) -> a1 -> c b)
+                 -> (forall g. g -> c g) -> a -> c a
+        (bound at tcfail201.hs:16:1)
+      hsDoc :: a (bound at tcfail201.hs:16:13)
     In the pattern: DocEmpty
     In a case alternative: DocEmpty -> z DocEmpty
     In the expression:
index 3283089..706933d 100644 (file)
@@ -13,15 +13,6 @@ tcfail206.hs:8:5:
     In the expression: (1,)
     In an equation for `b': b = (1,)
 
-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:10:6
-    Expected type: a -> (a, Bool)
-      Actual type: a -> (a, a)
-    In the expression: (True || False,)
-    In an equation for `c': c = (True || False,)
-
 tcfail206.hs:14:5:
     Couldn't match type `Bool' with `Int'
     Expected type: Bool -> (# Int, Bool #)
@@ -36,12 +27,3 @@ tcfail206.hs:17:5:
       Actual type: Int -> (# Integer, Int #)
     In the expression: (# 1, #)
     In an equation for `e': e = (# 1, #)
-
-tcfail206.hs:20:5:
-    Couldn't match type `a' with `Bool'
-      `a' is a rigid type variable bound by
-          the type signature for f :: a -> (# a, Bool #) at tcfail206.hs:19:6
-    Expected type: a -> (# a, Bool #)
-      Actual type: a -> (# a, a #)
-    In the expression: (# True || False, #)
-    In an equation for `f': f = (# True || False, #)
index d606115..d3172b6 100644 (file)
@@ -5,6 +5,5 @@ tcfail208.hs:4:19:
       bound by the type signature for
                  f :: (Monad m, Eq a) => a -> m a -> Bool
       at tcfail208.hs:3:6-40
-    Possible fix: add an instance declaration for (Eq (m a))
     In the expression: (return x == y)
     In an equation for `f': f x y = (return x == y)
index 45fe19f..3dff893 100644 (file)
@@ -5,7 +5,7 @@ module Main where
 -- care.  See comment about polymorphic recursion in TcMonoBinds.lhs
 
 import System.Environment (getArgs)
-import GHC.IOBase
+import GHC.IO
 
 sfoldl :: (a -> Int -> a) -> a -> [Int] -> a
 sfoldl f z [] = z