2017-02-20 266 views
1

我正在阅读关于monad的一些有关Haskell的经验,并且混淆了类型构造函数的概念。Haskell中的类型构造函数和java泛型类型有什么区别?

甲单子是一个三元组(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中,对吗?如果不是,有什么区别?

+0

在Java中,类型将是类的名称 –

+1

嗯,它更类似于'interface',或者至少是一个* abstract *类。 – Bakuriu

回答

5

你不会对我感到困惑。这看起来像是哈斯克尔的Monad类的非常准确的Java翻译。

在Haskell,“类型”是一个具体类型没有未指定的参数,如IntegerM<String>,或M<T>对于任何固定T。有一个或多个剩余参数(如M)是一个“类型构造函数”,因为它类似于类型的构造函数:为了生成具体类型,必须给它一个类型参数(值为T)。

相关问题