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

时间:2016-06-23 23:29:30

标签: type-systems higher-kinded-types higher-order-types

在之前的一个问题中,我问Why can the Monad interface not be declared in Java?。在那里,我收到了Brian Goetz的评论说我应该称之为“更高阶的类型”“更高的 kinded 类型”。

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

  • 高阶类型
  • 更高的kinded类型
  • 更高阶的种类

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

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

但是,它们都没有标记维基。

1 个答案:

答案 0 :(得分:1)

this博文后,高阶类型一词似乎是更高级别的更高等级类型的常用术语EM>。 更高阶的可能是我在困惑时刚刚编造的术语。

更高的kinded类型

使用更高的kinded类型,可以接收一个本身是泛型类型的类型参数:

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

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

更高等级类型

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

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

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