在之前的一个问题中,我问Why can the Monad interface not be declared in Java?。在那里,我收到了Brian Goetz的评论说我应该称之为“更高阶的类型”“更高的 kinded 类型”。
现在,我阅读了更多关于类型系统的内容,并且我理解了更高级别的类型的概念。但是,我仍然对条款感到困惑。我试图用谷歌自己消除歧义,但似乎没有一个明确的答案。因此,我的问题是以下术语的确切含义:
这三个术语都存在吗?它们之间有区别吗?有什么不同?编程语言的含义是否有所不同?
我还注意到StackOverflow有多个标签:
但是,它们都没有标记维基。
答案 0 :(得分:1)
在this博文后,高阶类型一词似乎是更高级别的和更高等级类型的常用术语EM>。 更高阶的可能是我在困惑时刚刚编造的术语。
使用更高的kinded类型,可以接收一个本身是泛型类型的类型参数:
interface Foo<T<_>> {
T<String> get();
}
这是声明Monad
接口所必需的。
使用更高级别的类型,可以接收其类型仍包含未指定类型参数的参数:
interface Bar {
void foobar(<E> List<E> list);
}
不幸的是,更高级别的类型检查/推断是不可判定的。