高等类型与高阶类型的消歧
Disambiguation of higher kinded type vs higher order type
在之前的问题中我问过 。在那里,我收到了 Brian Goetz 的评论,说我应该打电话给 "higher order types" "higher kinded types".
现在,我阅读了更多有关类型系统的内容,并且理解了更高类型的概念。但是,我仍然对这些术语感到困惑。我试图自己使用 Google 来消除它们的歧义,但似乎没有明确的答案。因此,我的问题是以下术语的确切含义是什么:
- 高阶类型
- 高等类型
- 高阶种类
这三个术语都存在吗?它们之间有区别吗?有什么不同?不同编程语言的含义是否不同?
我还注意到 Whosebug 有多个标签:
但是,他们两个都没有标签 wiki。
关注 this 博客 post,术语 高阶类型 似乎是 高阶类型 和 更高级别的类型 。 higher order kind大概是我在迷茫的时候随便编的一个名词
高等类型
对于更高种类的类型,可以接收本身是泛型类型的类型参数:
interface Foo<T<_>> {
T<String> get();
}
这是声明 Monad
接口所必需的。
更高级别类型
对于更高级别的类型,可以接收其类型仍包含未指定类型参数的参数:
interface Bar {
void foobar(<E> List<E> list);
}
不幸的是,更高级别的类型 checking/inference 是不可判定的。
在之前的问题中我问过
现在,我阅读了更多有关类型系统的内容,并且理解了更高类型的概念。但是,我仍然对这些术语感到困惑。我试图自己使用 Google 来消除它们的歧义,但似乎没有明确的答案。因此,我的问题是以下术语的确切含义是什么:
- 高阶类型
- 高等类型
- 高阶种类
这三个术语都存在吗?它们之间有区别吗?有什么不同?不同编程语言的含义是否不同?
我还注意到 Whosebug 有多个标签:
但是,他们两个都没有标签 wiki。
关注 this 博客 post,术语 高阶类型 似乎是 高阶类型 和 更高级别的类型 。 higher order kind大概是我在迷茫的时候随便编的一个名词
高等类型
对于更高种类的类型,可以接收本身是泛型类型的类型参数:
interface Foo<T<_>> {
T<String> get();
}
这是声明 Monad
接口所必需的。
更高级别类型
对于更高级别的类型,可以接收其类型仍包含未指定类型参数的参数:
interface Bar {
void foobar(<E> List<E> list);
}
不幸的是,更高级别的类型 checking/inference 是不可判定的。