[commit: ghc] ghc-8.2: Allow associated types to pattern-match in non-class-bound variables (82366c4)
git at git.haskell.org
git at git.haskell.org
Wed Mar 15 13:17:34 UTC 2017
Repository : ssh://git@git.haskell.org/ghc
On branch : ghc-8.2
Link : http://ghc.haskell.org/trac/ghc/changeset/82366c4c1501d57dd8490818ef6e0709aca8836f/ghc
>---------------------------------------------------------------
commit 82366c4c1501d57dd8490818ef6e0709aca8836f
Author: Ryan Scott <ryan.gl.scott at gmail.com>
Date: Tue Mar 14 10:58:58 2017 -0400
Allow associated types to pattern-match in non-class-bound variables
Summary:
After 8136a5cbfcd24647f897a2fae9fcbda0b1624035 (#11450), if you have
a class with an associated type:
```
class C a where
type T a b
```
And you try to create an instance of `C` like this:
```
instance C Int where
type T Int Char = Bool
```
Then it is rejected, since you're trying to instantiate the variable ``b`` with
something other than a type variable. But this restriction proves quite
onerous in practice, as it prevents you from doing things like this:
```
class C a where
type T a (b :: Identity c) :: c
instance C Int where
type T Int ('Identity x) = x
```
You have to resort to an auxiliary type family in order to define this now,
which becomes extremely tiring. This lifts this restriction and fixes #13398,
in which it was discovered that adding this restriction broke code in the wild.
Test Plan: ./validate
Reviewers: simonpj, bgamari, austin
Reviewed By: simonpj
Subscribers: rwbarton, thomie
Differential Revision: https://phabricator.haskell.org/D3302
(cherry picked from commit 67345ccf51538acf2b6452c738ba641b119f5a5e)
>---------------------------------------------------------------
82366c4c1501d57dd8490818ef6e0709aca8836f
compiler/typecheck/TcValidity.hs | 60 +++++++++++---------
docs/users_guide/8.2.1-notes.rst | 19 +++++++
docs/users_guide/glasgow_exts.rst | 66 ++++++----------------
testsuite/tests/ghci/scripts/T4175.hs | 4 +-
testsuite/tests/ghci/scripts/T4175.stdout | 9 +--
testsuite/tests/ghci/scripts/T6018ghcifail.stderr | 13 ++---
.../tests/indexed-types/should_compile/T13398a.hs | 19 +++++++
.../tests/indexed-types/should_compile/T13398b.hs | 12 ++++
testsuite/tests/indexed-types/should_compile/all.T | 2 +
.../indexed-types/should_fail/SimpleFail10.hs | 3 +-
.../indexed-types/should_fail/SimpleFail10.stderr | 11 ----
testsuite/tests/indexed-types/should_fail/all.T | 2 +-
testsuite/tests/th/T9692.hs | 2 +-
testsuite/tests/th/T9692.stderr | 4 +-
.../tests/typecheck/should_fail/T6018fail.stderr | 13 ++---
15 files changed, 125 insertions(+), 114 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 82366c4c1501d57dd8490818ef6e0709aca8836f
More information about the ghc-commits
mailing list