type-systems – 消除较高阶段类型与较高阶类型的消歧

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

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

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

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

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

> higher-order-types
> higher-kinded-types

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

最佳答案 在
this博客文章之后,术语高阶类型似乎是更高级别类型和更高级别类型的常用术语.更高阶的类型可能是我刚刚在困惑时弥补的一个术语.

较高的kinded类型

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

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

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

更高级别的类型

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

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

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

点赞