3 回答

互換的青春
TA貢獻1797條經(jīng)驗 獲得超6個贊
事實上,與人們對Monad的共識相反,它們與國家無關(guān)。Monad僅僅是一種包裝事物的方法,并提供了對包裝的東西進行操作的方法,而不需要對其展開包裝。
例如,您可以在Haskell中創(chuàng)建一個類型來包裝另一個類型:
data?Wrapped?a?=?Wrap?a
包裝我們定義的東西
return?::?a?->?Wrapped?a return?x?=?Wrap?x
若要在不展開包裝的情況下執(zhí)行操作,請假定您有一個函數(shù)。f :: a -> b
,然后你可以這樣做電梯該函數(shù)的作用是對包裝好的值進行操作:
fmap?::?(a?->?b)?->?(Wrapped?a?->?Wrapped?b)fmap?f?(Wrap?x)?=?Wrap?(f?x)
這就是我們要理解的一切。然而,事實證明,這樣做有一個更通用的功能。起重,也就是bind
:
bind?::?(a?->?Wrapped?b)?->?(Wrapped?a?->?Wrapped?b)bind?f?(Wrap?x)?=?f?x
bind
能做的比fmap
,反之亦然。實際上,fmap
只能根據(jù)bind
和return
..所以,在定義單曲時.。你給出它的類型(這里是Wrapped a
)然后說出它是如何return
和bind
行動有效。
最酷的是,這是一個如此普遍的模式,它彈出的地方到處都是,以一種純粹的方式封裝狀態(tài)只是其中之一。
至于對單曲的理解,不要太擔(dān)心。讀一讀你覺得有趣的東西,如果你不馬上理解的話,不要擔(dān)心。然后,只要潛入像Haskell這樣的語言就可以了。單簧管就是這樣一種東西,當(dāng)你通過練習(xí)了解你的大腦時,有一天你突然意識到你理解了它們。
添加回答
舉報
0/150
提交
取消