高等类型与高阶类型的消歧

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 是不可判定的。