路径依赖类型和依赖类型之间有什么区别?

时间:2014-07-25 16:55:33

标签: scala dependent-type path-dependent-type

Scala具有路径依赖类型,但据说Scala不支持依赖类型。路径依赖类型和依赖类型之间有什么区别?

据我所知,路径依赖类型是一种依赖类型。

1 个答案:

答案 0 :(得分:3)

依赖类型是依赖于值的类型。路径依赖类型是一种特定类型的依赖类型,其中类型取决于路径。

我不确定Scala社区之外是否存在术语“路径依赖类型”。无论如何,问题是,路径是什么?对于Scala,这是在language specification中定义的:基本上它是非变量值上的一系列选择a.b.c...

路径相关类型是具有路径的类型,例如

中的a.T
class A { type T; def f: T }
def f(a: A): a.T = a.f

还有其他类型的依赖类型。例如,在Scala中,pending proposal是为语言添加基于文字的类型,因此您可以编写val x: 42.type = 21 + 21

为了键入检查使用依赖类型的程序,类型系统(和编译器)需要知道这些值及其操作的语义。 Scala编译器知道选择的语义,并可以决定两个路径是否相同。对于使用基于文字的类型的示例,需要扩展编译器以了解整数上的+操作意味着什么。