消除较高种类类型与较高顺序类型的歧义

Ste*_*ase 5 type-systems higher-kinded-types higher-order-types

在上一个问题中,我问为什么不能用Java声明Monad接口?。在那里,我得到的评价从作者Brian Goetz说,我应该叫“高阶类型”,“高kinded类型”。

现在,我阅读了有关类型系统的更多信息,并且了解了更高种类的类型的概念。但是,我仍然对这些术语感到困惑。我试图使用Google自己消除它们的歧义,但是似乎没有一个明确的答案。因此,我的问题是以下术语的确切含义是什么:

  • 高阶类型
  • 高级种类
  • 高阶种类

这三个术语都存在吗?它们之间有区别吗?有什么不同?编程语言之间的含义是否有所不同?

我还注意到StackOverflow有多个标签:

但是,两者都没有标签Wiki。

Ste*_*ase 4

这篇博客文章之后,术语“高阶类型”似乎是“高种类类型”和“高等级类型”的常用术语。高阶种类可能是我在困惑时编造的一个术语。

高等种类

对于更高种类的类型,可以接收本身是泛型类型的类型参数:

interface Foo<T<_>> {
    T<String> get();
}
Run Code Online (Sandbox Code Playgroud)

这是声明Monad接口所必需的。

高阶型

对于更高级别的类型,可以接收其类型仍包含未指定类型参数的参数:

interface Bar {
    void foobar(<E> List<E> list);
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,更高级别的类型检查/推理是不可判定的。