Asserting vars with different Uniques represent the same Object

Andreas Klebinger klebinger.andreas at gmx.at
Sat Nov 11 10:47:58 UTC 2017


My core questions are:

* Should variables representing the same thing always have the same unique?
* If not how can one assert they actually represent the same thing?

Working on the pattern matching code I came across this assertion:

 > ASSERT(tvs1 `equalLength` ex_tvs )
http://git.haskell.org/ghc.git/blob/HEAD:/compiler/deSugar/MatchCon.hs#l125

tvs1 and ex_tvs are both the existentially quantified type variables of 
a pattern.
One gained by taking apart the pattern itself and one by taking apart 
the ConLike in the pattern.

While as far as I can tell they always represent the same Types they 
don't always compare as equal.
Is there any other stable way to compare them? (By name? Something 
else?). Or is them not being
equal a bug to begin with.

Follow up question:
The whole assert is essentially a unit test as ex_tvs isn't used outside 
of the assert.
Is there a solution to check these invariants in tests instead of the 
source code?
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/ghc-devs/attachments/20171111/14591d92/attachment-0001.html>


More information about the ghc-devs mailing list