Comparing StableNames of different type

Edward Kmett ekmett at gmail.com
Fri Aug 24 16:10:05 CEST 2012


You can wind up with StableNames matching even when the types differ. Consider naming [] :: [Int] and [] :: [()]. This is harmless for most usecases.

I've used unsafeCoerce to compare StableNames on different types for years without problems.

Admittedly, I do find it a bit of an oddity that the type shows up in their signature at all. :)

Sent from my iPhone

On Aug 24, 2012, at 5:08 AM, Simon Marlow <marlowsd at gmail.com> wrote:

> On 24/08/2012 07:39, Emil Axelsson wrote:
>> Hi!
>> 
>> Are there any dangers in comparing two StableNames of different type?
>> 
>>   stEq :: StableName a -> StableName b -> Bool
>>   stEq a b = a == (unsafeCoerce b)
>> 
>> I could guard the coercion by first comparing the type representations,
>> but that would give me a `Typeable` constraint that would spread
>> throughout the code.
> 
> I think that's probably OK.  It should be safe even if the types are different, but I presume you expect the types to be the same, since otherwise the comparison would be guaranteed to return False, right?
> 
> Cheers,
>    Simon
> 
> 
> _______________________________________________
> Glasgow-haskell-users mailing list
> Glasgow-haskell-users at haskell.org
> http://www.haskell.org/mailman/listinfo/glasgow-haskell-users



More information about the Glasgow-haskell-users mailing list