Haskell中的类型构造函数和java泛型类型之间有什么不同?

时间:2017-02-20 02:11:07

标签: java haskell generics monads

我正在读一些关于monad的事情,没有Haskell的经验,并且与类型构造函数的概念混淆。

  

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

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中的泛型类型,我是对的吗?如果没有,有什么区别?

1 个答案:

答案 0 :(得分:5)

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

在Haskell中,“type”是一个没有未指定参数的具体类型,例如IntegerM<String>M<T>,用于任何固定T。带有一个或多个剩余参数的东西,比如M,只是一个“类型构造函数”,因为它就像是类型的构造函数:它必须被赋予一个类型参数(T的值)in为了生产出具体的类型。