[commit: ghc] wip/spj-tc-branch: Refactor typechecking of pattern bindings (42c1792)

git at git.haskell.org git at git.haskell.org
Wed Aug 31 16:44:20 UTC 2016


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

On branch  : wip/spj-tc-branch
Link       : http://ghc.haskell.org/trac/ghc/changeset/42c1792403cb8241e2ac8c0d357a1a0aa7570a87/ghc

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

commit 42c1792403cb8241e2ac8c0d357a1a0aa7570a87
Author: Simon Peyton Jones <simonpj at microsoft.com>
Date:   Wed Aug 31 09:28:39 2016 +0100

    Refactor typechecking of pattern bindings
    
    This patch fixes a regression introduced, post 8.0.1, by
    this major commit:
    
         commit 15b9bf4ba4ab47e6809bf2b3b36ec16e502aea72
         Author: Simon Peyton Jones <simonpj at microsoft.com>
         Date:   Sat Jun 11 23:49:27 2016 +0100
    
             Improve typechecking of let-bindings
    
             This major commit was initially triggered by #11339, but it
             spiraled into a major review of the way in which type
             signatures for bindings are handled, especially partial type
             signatures.
    
    I didn't get the typechecking of pattern bindings right, leading
    to Trac #12427.
    
    In fixing this I found that this program doesn't work:
    
      data T where
        T :: a -> ((forall b. [b]->[b]) -> Int) -> T
    
      h1 y = case y of T _ v -> v
    
    Works in 7.10, but not in 8.0.1.
    
    There's a happy ending. I found a way to fix this, and improve
    pattern bindings too.  Not only does this fix #12427, but it also
    allows
    
    In particular,we now can accept
    
      data T where MkT :: a -> Int -> T
    
      ... let { MkT _ q = t } in ...
    
    Previously this elicited "my head exploded" but it's really
    fine since q::Int.
    
    The approach is described in detail in TcBinds
       Note [Typechecking pattern bindings]
    Super cool.  And not even a big patch!


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

42c1792403cb8241e2ac8c0d357a1a0aa7570a87
 compiler/typecheck/TcBinds.hs                      | 182 ++++++++++++++-------
 compiler/typecheck/TcPat.hs                        |  59 +++++--
 .../tests/typecheck/should_compile/T12427a.hs      |  28 ++++
 .../tests/typecheck/should_compile/T12427b.hs      |  20 +++
 testsuite/tests/typecheck/should_compile/all.T     |   3 +
 5 files changed, 214 insertions(+), 78 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 42c1792403cb8241e2ac8c0d357a1a0aa7570a87


More information about the ghc-commits mailing list