[GHC] #14331: Overzealous free-floating kind check causes deriving clause to be rejected
GHC
ghc-devs at haskell.org
Tue Oct 17 22:43:39 UTC 2017
#14331: Overzealous free-floating kind check causes deriving clause to be rejected
-------------------------------------+-------------------------------------
Reporter: RyanGlScott | Owner: (none)
Type: bug | Status: merge
Priority: normal | Milestone: 8.2.2
Component: Compiler (Type | Version: 8.2.1
checker) |
Resolution: | Keywords: deriving
Operating System: Unknown/Multiple | Architecture:
| Unknown/Multiple
Type of failure: GHC rejects | Test Case:
valid program | deriving/should_compile/T14331
Blocked By: | Blocking:
Related Tickets: | Differential Rev(s):
Wiki Page: |
-------------------------------------+-------------------------------------
Comment (by simonpj):
Ah! I disagee with comment:20. Let's start with this, after renaming:
{{{
class C a b
data D c = D
deriving (forall k. C (c :: k))
}}}
Now we typecheck the class and `data D` decls, but not yet the `deriving`
part, yielding
{{{
class C {k1} {k2} (a:k1) (b:k2)
data D {k3} (c:k3) = D
deriving (forall k. C (c :: k))
}}}
Now we move on to typechecking the `deriving` clause. Here we fail,
becuase
`c` has kind `k3` but its occurrence in the deriving clause claims it has
kind `k`,
where those two binders are quite different. And that's just what the
error message says.
To make it work, write
{{{
data D (c::k) = D deriving( D c )
}}}
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/14331#comment:26>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list