[commit: ghc] ghc-8.0: Fix impredicativity (again) (c93ad55)

git at git.haskell.org git at git.haskell.org
Thu Oct 13 15:16:25 UTC 2016


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

On branch  : ghc-8.0
Link       : http://ghc.haskell.org/trac/ghc/changeset/c93ad554c9f9788b3e2ec45fa4d0131101721536/ghc

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

commit c93ad554c9f9788b3e2ec45fa4d0131101721536
Author: Simon Peyton Jones <simonpj at microsoft.com>
Date:   Sun Sep 25 15:50:18 2016 +0100

    Fix impredicativity (again)
    
    This patch fixes Trac #12616.
    
    Dignosis.  In TcUnify.tc_sub_type_ds we were going to some trouble to
    support co- and contra-variance even for impredicative types.  With
    -XImpredicativeTYpes, this allowed a unification variable to be
    unified with a polytype (probably wrongly) and that caused later
    trouble in the constraint solver, where -XImpredicativeTypes was /not/
    on.  In effect, -XImpredicativeTypes can't be switched on locally.
    
    Why did we want ImpredicativeTypes locally?  Because the program
    generated by GND for a higher-rank method involved impredicative
    instantation of 'coerce':
          op = coerce op   -- where op has a higher rank type
    See Note [Newtype-deriving instances] in TcGenDeriv.
    
    Cure.
    
    1.  It is ghastly to rely on ImpredicativeTypes (a 100% flaky
        feature) to instantiate coerce polymorphically.  Happily we
        now have Visible Type Application, so I've used that instead
        which should be solid and reliable.
    
    2.  I deleted the code in tc_sub_type_ds that allows the constraint
        solver to "look through" a unification variable to find a
        polytype.  That used to be essential in the days of ReturnTv,
        but it's utterly unreliable and should be consigned to the dustbin
        of history.  (We have ExpType now for the essential uses.)
    
    Tests involving ImpredicativeTypes are affected, but I'm not worried
    about them... it's advertised as a feature you can't rely on, and
    I want to reform it outright.
    
    (cherry picked from commit b612da667fe8fa5277fc78e972a86d4b35f98364)


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

c93ad554c9f9788b3e2ec45fa4d0131101721536
 compiler/hsSyn/HsUtils.hs                          |  8 +--
 compiler/typecheck/TcDeriv.hs                      |  2 +
 compiler/typecheck/TcGenDeriv.hs                   | 28 ++++----
 compiler/typecheck/TcUnify.hs                      | 30 +++------
 testsuite/tests/boxy/Base1.hs                      |  3 +
 testsuite/tests/boxy/Base1.stderr                  | 18 +++++
 testsuite/tests/boxy/T2193.hs                      |  2 +
 testsuite/tests/boxy/all.T                         |  4 +-
 testsuite/tests/deriving/should_compile/T12616.hs  | 21 ++++++
 testsuite/tests/deriving/should_compile/all.T      |  1 +
 testsuite/tests/deriving/should_fail/T4846.stderr  |  4 +-
 testsuite/tests/typecheck/should_compile/T12644.hs | 14 ++++
 testsuite/tests/typecheck/should_compile/all.T     |  1 +
 testsuite/tests/typecheck/should_compile/tc211.hs  |  3 +
 .../tests/typecheck/should_compile/tc211.stderr    | 78 ++++++++++++++++++++--
 .../tests/typecheck/should_fail/T10619.stderr      | 18 ++---
 .../tests/typecheck/should_fail/T2846b.stderr      |  3 +-
 testsuite/tests/typecheck/should_fail/T8428.stderr |  5 +-
 testsuite/tests/typecheck/should_fail/all.T        |  2 +-
 .../tests/typecheck/should_fail/tcfail016.stderr   |  2 +-
 testsuite/tests/typecheck/should_fail/tcfail165.hs |  4 +-
 .../tests/typecheck/should_fail/tcfail165.stderr   | 12 ++++
 testsuite/tests/typecheck/should_fail/tcfail174.hs |  2 +
 .../tests/typecheck/should_fail/tcfail174.stderr   | 19 ++++--
 testsuite/tests/typecheck/should_run/all.T         |  2 +-
 .../tests/typecheck/should_run/tcrun042.stderr     |  6 ++
 26 files changed, 218 insertions(+), 74 deletions(-)

Diff suppressed because of size. To see it, use:

    git diff-tree --root --patch-with-stat --no-color --find-copies-harder --ignore-space-at-eol --cc c93ad554c9f9788b3e2ec45fa4d0131101721536


More information about the ghc-commits mailing list