【问题标题】:Disambiguation of higher kinded type vs higher order type高阶类型与高阶类型的消歧
【发布时间】:2016-06-23 23:29:29
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

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


    【解决方案1】:

    在this 的博文之后,higher order type 这个词似乎是 higher kinded type 和 higher rank type 的常用词. higher order kind大概是我一时糊涂才编出来的一个名词。

    高级类型

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

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

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

    更高等级的类型

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

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

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

    【讨论】:

    • 视情况而定。实际上,rank-2 类型是可判定的,尽管并非微不足道。据我所知,任何更高的都无法确定。
    猜你喜欢
    • 1970-01-01
    • 2012-10-25
    • 1970-01-01
    • 2012-11-21
    • 2020-02-16
    • 2019-07-25
    • 1970-01-01
    • 2020-05-17
    • 2017-10-12
    相关资源
    最近更新 更多