【问题标题】:What's the different between type constructor in Haskell and java generic type?Haskell中的类型构造函数和java泛型类型有什么区别?
【发布时间】:2017-02-20 02:11:07
【问题描述】:

我正在阅读一些关于 monad 的内容,但没有使用 Haskell 的经验,并且对类型构造函数的概念感到困惑。

monad 是由一个类型构造函数 M 和一对多态函数组成的三元组(MunitMbindM)。

unitM :: a -> M a

bindM :: M a -> (a -> M b) -> M b

在 Java 中:

public class M<T> {
    static <T> M<T> unit(T a)
    static <T,R> M<R> bind(M<T> a, Function<T,M<R>> f)
}

我认为它们是相同的,类型构造函数就像 Java 中的泛型类型,对吗?如果不是,有什么区别?

【问题讨论】:

  • 在 Java 中,类型是类的名称
  • 嗯,它更类似于interface,或者至少是一个abstract类。

标签: java haskell generics monads


【解决方案1】:

你听起来对我来说并不困惑。这看起来像是对 Haskell 的 Monad 类的 Java 异常准确的翻译。

在 Haskell 中,“类型”是没有未指定参数的具体类型,例如 IntegerM&lt;String&gt;M&lt;T&gt; 用于任何固定的 T。具有一个或多个剩余参数的东西,例如 M,是“类型构造函数”,因为它就像类型的构造函数:必须给它一个类型参数(T 的值)才能生成具体类型。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-14
    • 1970-01-01
    • 2010-10-16
    • 1970-01-01
    相关资源
    最近更新 更多