[GHC] #11120: Missing type representations
GHC
ghc-devs at haskell.org
Wed Jan 20 11:57:35 UTC 2016
#11120: Missing type representations
-------------------------------------+-------------------------------------
Reporter: goldfire | Owner:
Type: bug | Status: patch
Priority: high | Milestone: 8.0.1
Component: Compiler | Version: 7.11
Resolution: | Keywords:
Operating System: Unknown/Multiple | Architecture:
| Unknown/Multiple
Type of failure: None/Unknown | Test Case:
Blocked By: | Blocking:
Related Tickets: | Differential Rev(s): Phab:D1769
Wiki Page: |
-------------------------------------+-------------------------------------
Comment (by simonpj):
We appear to be on to Phab:D1774 now, correct? Change the Phab link?
Like Richard I'm getting lost. That Phab seems to be spiraling out of
control. Let's take one thing at at time.
* Is `Proxy Char#` a valid type? Not currently: we get
{{{
Illegal unlifted type: Char#
}}}
But there is no reason for this to be rejected! `Proxy :: forall k. k
->*`, and I see no reason why we can't instantiate `k` with `TYPE
Unlifted`. Looking further, the error message comes not from the kind-
unifier, but later in `TcValidity`; see `check_lifted`. I think we can
probably simply remove all calls to `check_lifted`.
* Can you have `TypeRep Char#` or `typeRep @Char#`, or `Typeable Char#`.
Again, you can't right now, but actually I think you could; they are all
kind-polymorphic, and the instantiating kind could be `TYPE Unlifted`.
* If we did, we might be faced with solving `Typeable Char#`. That would
mean adding a type rep for `Char#`; but we could simply make it insoluble
for now, and report a type error.
* Could solving `Typeable Char#` come up in GHC today (i.e. without fixing
`TcValidity`)? Yes: consider `typeRep (undefined :: Proxy (Char# ->
Int)`. Nothing wrong with that on the face of it. So we generate
`Typeable (Char# -> Int)` constraint, and then decompose to `Typeable
Char#` and `Typeable Int`. And then we fail in solving `Typeable Char#`
* What about ''promoted'' data constructors?
{{{
data CH = DCH Char#
}}}
Now suppose (comment:14) that we ask for `typeOf (Proxy :: Proxy 'DCH)`.
This gives `Typeable 'DCH`. At the moment I can't see why that would need
a type-rep for `Char#` as comment:14 suggests. Any ideas?
So my proposal is:
* Let's NOT (yet) have type-reps for primitive types
* Let's fix the Typeable solver so that it fails gracefully on `Typeable
Char#`.
* And let's try the effect of removing the `check_unlifted` in
`TcValidity`.
Would that be a good start?
That still leaves open the questions in comment:3. But first things
first.
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/11120#comment:19>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list