diff options
author | Simon Peyton Jones <simonpj@microsoft.com> | 2019-02-21 15:27:17 +0000 |
---|---|---|
committer | Marge Bot <ben+marge-bot@smart-cactus.org> | 2019-03-09 02:07:53 -0500 |
commit | 1f5cc9dc8aeeafa439d6d12c3c4565ada524b926 (patch) | |
tree | a83c219447dc397524535f408368437422178cba /testsuite/tests/dependent/should_compile/all.T | |
parent | 2762f94dc27cc065dded7755f99c66cba26683dd (diff) | |
download | haskell-1f5cc9dc8aeeafa439d6d12c3c4565ada524b926.tar.gz |
Stop inferring over-polymorphic kinds
Before this patch GHC was trying to be too clever
(Trac #16344); it succeeded in kind-checking this
polymorphic-recursive declaration
data T ka (a::ka) b
= MkT (T Type Int Bool)
(T (Type -> Type) Maybe Bool)
As Note [No polymorphic recursion] discusses, the "solution" was
horribly fragile. So this patch deletes the key lines in
TcHsType, and a wodge of supporting stuff in the renamer.
There were two regressions, both the same: a closed type family
decl like this (T12785b) does not have a CUSK:
type family Payload (n :: Peano) (s :: HTree n x) where
Payload Z (Point a) = a
Payload (S n) (a `Branch` stru) = a
To kind-check the equations we need a dependent kind for
Payload, and we don't get that any more. Solution: make it
a CUSK by giving the result kind -- probably a good thing anyway.
The other case (T12442) was very similar: a close type family
declaration without a CUSK.
Diffstat (limited to 'testsuite/tests/dependent/should_compile/all.T')
-rw-r--r-- | testsuite/tests/dependent/should_compile/all.T | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/testsuite/tests/dependent/should_compile/all.T b/testsuite/tests/dependent/should_compile/all.T index 4ba649ac9d..4e162aed69 100644 --- a/testsuite/tests/dependent/should_compile/all.T +++ b/testsuite/tests/dependent/should_compile/all.T @@ -68,3 +68,5 @@ test('T14729kind', normal, ghci_script, ['T14729kind.script']) test('T16326_Compile1', normal, compile, ['']) test('T16326_Compile2', normal, compile, ['']) test('T16391a', normal, compile, ['']) +test('T16344b', normal, compile, ['']) + |