Why does Scala have path-dependent types?

2020-02-09 09:11发布

问题:

I've been doing some research on path-dependent types. The best description I could find for it was:

If L is a type label, then x.L and y.L are the same type iff x and y can be shown to refer to the same object.

This sometimes isn't the subtyping behaviour one would expect. I would expect that if L in the above example was indeed identical then that would be enough to make x.L and y.L indentical.

Is there any particular reason why Scala was designed this way?

回答1:

The Scalable Component Abstractions paper has a good explanation on path dependent types and also a good example in Section 3: "Case study: subject/observer".



回答2:

This paper explains it nicely. Basically, they're used to support abstract data type based programming and modularization.



回答3:

Think about L as about type argument of generic class. Scala boasts about its type members but underlying JVM still has the same limitations.