Unique as special boxing type & hidden constructors

Simon Marlow marlowsd at gmail.com
Thu Sep 4 09:49:39 UTC 2014


FastInt = Int#, so newtype doesn't work here.

Cheers,
Simon

On 15/08/2014 14:01, Edward Z. Yang wrote:
> 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
> ghc-devs at haskell.org
> http://www.haskell.org/mailman/listinfo/ghc-devs
>


More information about the ghc-devs mailing list