On Tue, Aug 21, 2018, 3:39 AM Simon Peyton Jones <[email protected]> wrote:
> > Actually I'm confused. Currently we have > > data StableName a = StableName (StableName# a) > > I believe (but there is no documentation to state) that the (StableName# > a) > * Has kind (TYPE UnliftedRep) > * Is the index of the entry in the Stable Name Table > > But if it's the index, why isn't it an IntRep? UnliftedRep is for > pointers? > That's explained in the paper. A StableName# is a pointer to a stable name object in the heap that *contains* an index into the stable name table. Basically, the garbage collector needs to know whether a stable name is alive or not, so it can work out when to clear it from the table. > Moreover eqStableName# :: StableName# a -> StableName# b -> Bool > is directly implemented in the code generator (StgCmmPrim) by an equality > comparison. > > If these things are correct, it would be great to write them down in a > Note. > > And if they are right, I'm now lost about what you question is. Equality > is > /already/ implemented by direct equality comparison, no? > It's currently implemented by an equality test on the indices stored in the stable name objects, rather than the pointers to those objects, if I'm not very much mistaken.
_______________________________________________ ghc-devs mailing list [email protected] http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs
