Haskell中的类型构造函数和java泛型有什么区别?



我正在阅读有关haskell没有经验并与类型构造函数的概念相混淆的单月的东西。

单元是三重(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中的通用类型一样,对吗?如果没有,有什么区别?

您听起来不会对我感到困惑。这看起来像是一个异常准确地翻译成哈斯克尔单元类的Java。

在Haskell中,"类型"是一种没有未指定参数的具体类型,例如任何固定的T,例如IntegerM<String>M<T>。具有一个或多个剩余参数(例如M)的内容是"类型构造函数",因为它就像类型的构造函数:必须给它一种类型的参数(T值)以产生混凝土类型。/p>

最新更新