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

Tri*_*Lee 1 java generics monads haskell

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

甲单子是一个三元组(M,unitM,bindM)由类型构造的M和一个对多态函数.

unitM :: a -> M a

bindM :: M a -> (a -> M b) -> M b
Run Code Online (Sandbox Code Playgroud)

在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)
}
Run Code Online (Sandbox Code Playgroud)

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

ama*_*loy 6

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

在Haskell,"类型"是一个具体类型没有未指定的参数,如Integer,M<String>M<T>对于任何固定T.有一个或多个剩余参数的东西,比如just M,是一个"类型构造函数",因为它就像是类型的构造函数:它必须被赋予一个类型参数(一个值T)才能生成一个具体的类型.