I’m studying the concept of path as implemented in the compiler. Since it seems that a path can be viewed as a type and a term I think the relevant files are Trees.scala and Types.scala. In Types.scala I find the following encoding:
p.x.type -> TermRef(p,x)
p#T -> TypeRef(p,T)
p.x.T = p.x.type#T is a derived form
I’m wondering if there is a procedure determining if two types are equals (in particular two path dependent types are equal) and how should I find it. On the other hand, I’m interested in why this notation. Could I just not have written:
p.type
p#T?
Update
Method “matches” at line 980 of Types.scala
def matches(that: Type)(implicit ctx: Context): Boolean = {
record(“matches”)
ctx.typeComparer.matchesType(this, that, relaxed = !ctx.phase.erasedTypes)
}
seems to do the job of comparing types for equality