[GHC] #9858: Typeable instances should be kind-aware
GHC
ghc-devs at haskell.org
Thu Feb 5 05:43:39 UTC 2015
#9858: Typeable instances should be kind-aware
-------------------------------------+-------------------------------------
Reporter: dreixel | Owner: dreixel
Type: bug | Status: new
Priority: highest | Milestone: 7.10.1
Component: Compiler | Version: 7.9
Resolution: | Keywords:
Operating System: Unknown/Multiple | Architecture:
Type of failure: None/Unknown | Unknown/Multiple
Blocked By: | Test Case:
Related Tickets: | Blocking:
| Differential Revisions:
-------------------------------------+-------------------------------------
Comment (by int-e):
I'm wondering about the ramifications of this claim from [[Typeable
#Medium-termsolution]]:
> Although it is impossible to create all necessary Typeable instances for
poly-kinded constructors at the definition site (there's an infinite
number), it is possible to create Typeable "instances" on demand at use
sites.
Consider the following function:
{{{
f = \(p :: Proxy Proxy) -> typeRep p
}}}
Because the kind information of the `p` argument is not fully known at the
site of definition, I surmise that the corresponding `Kindable` (to use
oerjan's nomenclature) constraint gets propagated outward, meaning that at
the core language level, `f` gets an extra argument for passing the
`Kindable` evidence for the unknown kind argument of the second `Proxy`
type constructor.
It is my understanding that for the sake of backward compatibility, this
argument is implicit and not visible (even as a constraint) in the
Haskell-level type. Is that correct? I feel uncomfortable about this; I
like to be able to see in the Haskell type of functions what kind of
runtime evidence needs to be passed to a function to make it work.
The second thing I'm wondering about is what happens when polymorphic
kinds are never instantiated at all. Is the following program valid, and
if so, what will the kind of the `Proxy` be at runtime?
{{{
{-# LANGUAGE PolyKinds, DataKinds #-}
import Data.Typeable
main :: IO ()
main = print (typeRep (Proxy :: Proxy Proxy))
}}}
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/9858#comment:49>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list