[GHC] #14332: Deriving clauses can have forall types
GHC
ghc-devs at haskell.org
Thu Oct 12 12:48:49 UTC 2017
#14332: Deriving clauses can have forall types
-------------------------------------+-------------------------------------
Reporter: RyanGlScott | Owner: (none)
Type: bug | Status: new
Priority: normal | Milestone:
Component: Compiler (Type | Version: 8.2.1
checker) |
Resolution: | Keywords: deriving
Operating System: Unknown/Multiple | Architecture:
Type of failure: GHC accepts | Unknown/Multiple
invalid program | Test Case:
Blocked By: | Blocking:
Related Tickets: | Differential Rev(s):
Wiki Page: |
-------------------------------------+-------------------------------------
Comment (by RyanGlScott):
Replying to [comment:14 simonpj]:
> Ryan, might you be able to do this?
Er, I doubt it. This sounds like it goes well beyond my abilities as a GHC
hacker, since it requires intricate knowledge of:
* Somehow informing GHC of which type variables are "OK to unify" for
instance, the `k` in `data Proxy (a :: k)` is OK to unify, but the `k` in
`deriving (C (a :: k))` is not—what is the secret sauce in GHC to specify
this? I have no idea.
Actually, it's even more subtle than that. There are scenarios when
you'd want to unify kind variables in `deriving` types: when they're
//invisible//. For instance:
{{{#!hs
newtype Identity a = Identity a deriving Generic1
}}}
Here, `Generic1 :: (k -> *) -> Constraint`. But note that we never write
`k` explicitly, so it's more like `deriving (Generic1 {k})`. However, we
ultimately unify `k` with `*` in the end, giving us `deriving (Generic1
{*})`. Somehow, we //also// have to inform GHC that this is OK. Urp...
* WTF this "skolem" business from comment:9 is about. (I don't know if I
could even give a proper definition of this word, let alone profitably
implement it.)
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/14332#comment:15>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list