[GHC] #11120: Missing type representations

GHC ghc-devs at haskell.org
Fri Nov 27 16:04:29 UTC 2015


#11120: Missing type representations
-------------------------------------+-------------------------------------
        Reporter:  goldfire          |                Owner:
            Type:  bug               |               Status:  new
        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):
       Wiki Page:                    |
-------------------------------------+-------------------------------------

Comment (by goldfire):

 Replying to [comment:2 simonpj]:
 > > 1. You say (in Note [Grand plan for Typeable]) that there is trouble
 > > making the TyCon/Module information for the types in GHC.Types. But
 > > what precisely goes wrong? I agree that it seems a bit fishy, but I
 > > don't actually see the spot where trouble lurks. Did you try this?
 >
 > The difficulty is we can't generate the `TyCon` and `Module` for things
 in
 > `GHC.Types` when `TyCon` and `Module` are not yet defined.

 Perhaps I'm being dense, but why is this problematic? What panic or other
 undesirable situation will arise? To be clear: I'm proposing to keep
 `TyCon` and `Module` and such in `GHC.Types`. But also to put the
 representations for things defined in `GHC.Types` in `GHC.Types`.

 > The Grand Plan
 > comment says:
 >
 >   It's hard to generate the TyCon/Module bindings when the types TyCon
 >   and Module aren't yet available; i.e. when compiling GHC.Types
 >
 > Now what we ''could'' do (and it'd probably be a goodea) would be to put
 >  * TyCon
 >  * Module
 >  * Char
 >  * List
 >  * TrName
 >
 > in `GHC.Types`,

 These are already in `GHC.Types`.

 > and move the other types (eg `Float`, `Double`) out,
 > so that their type-reps *can* be derived by the normal mechanism.

 That seems possible. But I don't think it's necessary, as I've explained
 above.

 >
 >
 > > 3. Let's assume that we really can't clean up this mess. It still
 seems
 > > that several TyCons are missing from Data.Typeable.Internal. Like
 > > promoted nil and cons, and Nat, and Symbol. At the least, we should
 > > put a loud comment in the export list of GHC.Types saying that
 > > everything defined there must be accompanied by a definition in
 > > Data.Typeable.Internal.
 >
 > You are right.  The above might ameliorate the problem.
 > If it'd make your kind-equality work easier by all means do this.

 This isn't holding me up. I just had to shuffle a bunch of `GHC.Types` and
 `GHC.Prim` stuff around and wanted to do it right, so I had to understand
 the `Typeable` stuff. And that led to questions.

 >
 > > 2. Even more bizarre would be putting TyCon/Module info for GHC.Prim
 > > stuff (I'm thinking about the super-magical TYPE) right in GHC.Prim.
 >
 > But currently `TyCon` uses list and `Char`.  Do you want to put them in
 `GHC.Prim`?

 No. I want definitions in `GHC.Prim` to depend on `TyCon` and friends,
 which would remain in `GHC.Types`. This is highly bizarre. But it doesn't
 seem to break anything. And indeed I have this in my branch (`TYPE` is in
 `GHC.Prim` but `Levity` is in `GHC.Types`) and nothing complains.

 > How would that differ, really, from what we have now.
 >
 > And `TyCon` and `Module` both require actual code, whereas `GHC.Prim`
 types have
 > no code.

 Yes, my proposal means hard-coding `TyCon`s for `TYPE` and `#` (the only
 lifted types left in `GHC.Prim` in my branch). These would be `Id`s in
 `MkId` presumably.

 >
 > To respond to your suggestion more clearly I'd need more info
 > on what you have in mind.
 >
 > > 4. `Data.Typeable.Internal` uses `mkGhcTypesTyCon`, which refers to
 `GHC.Types`
 >
 > I don't understand the issue here.

 `mkGhcTypesTyCon` uses `GHC.Types` as the module whenever it's used. But
 sometimes it's for `GHC.Prim` types, not `GHC.Types` types.

 >
 > > That looks like the tycon's fingerprint is bogus whenever the module
 is compiled with `-dsuppress-uniques`. But I always understood
 `-dsuppress-uniques` to be a flag used only to control output, and that it
 should affect only the pretty-printer. So I'm very dubious of this code.
 >
 > Good point. But failing to suppress means that `-ddump-simpl` will show
 some unique values.  Maybe that's ok.  It's mainly use to reduce test-
 suite wobbles.  I'm honestly not sure what to do here, but not too
 bothered either way.

 But isn't the fingerprint Very Important? As in: don't we rely critically
 on fingerprints being unique when doing type comparison? If I understand
 this correctly, the current implementation means that `-dsuppress-uniques`
 makes the whole `Typeable` story unsound. And `-dsuppress-uniques` is
 meant to be a pretty-printing flag.

 To reduce testsuite wibbles, we should just add something to the post-
 processor we already have.

--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/11120#comment:3>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler


More information about the ghc-tickets mailing list