With dependent types, each `e.key` has it's own and separate type. So, if you have two `e`s, the type of the first e's key will not match the type of the second e's key.
I've been using a lot of Swift lately, and they have a generic type roadmap that talks about "existential types" and being able to "open" an existential. This looks very similar.
So, with:
def process(p: Path, key: p.Key): Something = ???
this will not compile:
val p1: Path = ???
val p2: Path = ???
process(p1, p2.key) <- compile-time-error