2017-02-20 251 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)。

相關問題