在上一个问题中,我问为什么在java中不声明单子接口?在那里,我收到了布莱恩·戈兹(Brian Goetz)的评论,说我应该称其为"高阶类型"更高 changed 类型"。
现在,我阅读了有关类型系统的更多信息,并且了解了更高的类型的概念。但是,我仍然对这些术语感到困惑。我试图使用Google独自自欺欺人,但是似乎没有一个明确的答案。因此,我的问题是以下术语的确切含义是什么:
- 高阶类型
- 更高的类型
- 高阶类型
是否存在所有三个术语?它们之间有区别吗?有什么不同?编程语言之间的含义会有所不同吗?
我还注意到stackoverflow具有多个标签:
- 高阶类型
- 高态型
但是,这两个都没有标签Wiki。
遵循此博客文章,术语高阶类型似乎是更高含义的类型和更高的常见术语等级类型。高阶类型可能是当我感到困惑时我刚刚构成的术语。
更高的类型
具有更高的类型,可以接收一种类型的参数,该参数本身是一种通用类型:
interface Foo<T<_>> {
T<String> get();
}
这是声明Monad
接口的必要条件。
更高的等级类型
具有较高等级类型的情况,可以接收一个类型仍然包含未指定类型参数的参数:
interface Bar {
void foobar(<E> List<E> list);
}
不幸的是,较高的等级类型检查/推理是不可决定的。