Comparing StableNames of different type

Nicolas Frisby nicolas.frisby at gmail.com
Tue Aug 28 23:06:09 CEST 2012


Great. It was the sharing of polymorphic values like [] I was worried
about. Thanks for confirming.

On Tue, Aug 28, 2012 at 1:07 PM, Edward Kmett <ekmett at gmail.com> wrote:
>
> On Tue, Aug 28, 2012 at 12:08 PM, Nicolas Frisby <nicolas.frisby at gmail.com>
> wrote:
>>
>> On Tue, Aug 28, 2012 at 3:34 AM, Simon Marlow <marlowsd at gmail.com> wrote:
>> >>>> On 24/08/2012 07:39, Emil Axelsson wrote:
>> >>>>>
>> >>>>> Are there any dangers in comparing two StableNames of different
>> >>>>> type?
>> >>>>>
>> >>>>>    stEq :: StableName a -> StableName b -> Bool
>> >>>>>    stEq a b = a == (unsafeCoerce b)
>> >>>>
>> > Ok, I've added it.  It will be in GHC 7.8.1.
>> >
>> > Cheers,
>> >         Simon
>>
>> Might we benefit from having a variant that returns Maybe (a :=: b)?
>> Is that safe? I have limited experience with StableNames, but that
>> intuitively seems safe. But polymorphism and references deserve more
>> thought than I've given this yet.
>>
>> I'm referring to "data (:=:) :: * -> * -> * where Refl :: (a :=: a)",
>> just to be clear.
>>
>
> No.
>
> You can't safely determine that  a ~ b given that two stablenames are equal.
>
> If you give Nothing a stableName, it'll have one stable name, regardless of
> if you use it as a Maybe Int or a Maybe Bool. Maybe Int and Maybe Bool are
> clearly not equal. This is admittedly an implementation detail. GHC would be
> perfectly within its rights (if somewhat silly) to construct a fresh Nothing
> every time, but it doesn't.
>
> The reasoning you applied only works for fully monomorphic types.
>
>  -Edward



More information about the Glasgow-haskell-users mailing list