6

在上一个问题中,我问为什么不能在 Java 中声明 Monad 接口?. 在那里,我收到了 Brian Goetz 的评论,说我应该将“高阶类型”称为“高阶类型”。

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

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

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

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

但是,它们都没有标签 wiki。

4

1 回答 1

4

这篇博文之后,术语higher order type似乎是higher kinded typehigher rank type的常用术语。高阶种类可能是我迷茫时才编出来的一个名词。

高种型

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

interface Foo<T<_>> {
    T<String> get();
}

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

高阶型

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

interface Bar {
    void foobar(<E> List<E> list);
}

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

于 2016-11-06T19:13:00.553 回答