The definition dates back to 1996, so it seems plausible that newtype is the way to go now.
Edward Excerpts from p.k.f.holzenspies's message of 2014-08-15 11:52:47 +0100: > Dear all, > > > I'm working with Alan to instantiate everything for Data.Data, so that we can > do better SYB-traversals (which should also help newcomers significantly to > get into the GHC code base). Alan's looking at the AST types, I'm looking at > the basic types in the compiler. > > Right now, I'm looking at Unique and two questions come up: > > > data Unique = MkUnique FastInt > > > 1) As someone already commented: Is there a specific reason (other than > history) that this isn't simply a newtype around an Int? If we're boxing > anyway, we may as well use the default Int boxing and newtype-coerce to the > specific purpose of Unique, no? > > > 2) As a general question for GHC hacking style; what is the reason for hiding > the constructors in the first place? > > I understand about abstraction and there are reasons for hiding, but there's > a "public GHC API" and then there are all these modules that people can > import at their own peril. Nothing is guaranteed about their consistency from > version to version of GHC. I don't really see the point about hiding > constructors (getting in the way of automatically deriving things) and then > giving extra functions like (in the case of Unique): > > > getKeyFastInt (MkUnique x) = x > > > mkUniqueGrimily x = MkUnique (iUnbox x) > > > I would propose to just make Unique a newtype for an Int and making the > constructor visible. > > > Regards, > > Philip _______________________________________________ ghc-devs mailing list [email protected] http://www.haskell.org/mailman/listinfo/ghc-devs
