最近對Haskell做了簡要的回顧之后,什么才是簡潔實用關于單曲本質上是什么的解釋?我發現我遇到的大多數解釋都很難理解,而且缺乏實際的細節。
3 回答
互換的青春
TA貢獻1797條經驗 獲得超6個贊
事實上,與人們對Monad的共識相反,它們與國家無關。Monad僅僅是一種包裝事物的方法,并提供了對包裝的東西進行操作的方法,而不需要對其展開包裝。
例如,您可以在Haskell中創建一個類型來包裝另一個類型:
data?Wrapped?a?=?Wrap?a
包裝我們定義的東西
return?::?a?->?Wrapped?a return?x?=?Wrap?x
若要在不展開包裝的情況下執行操作,請假定您有一個函數。f :: a -> b,然后你可以這樣做電梯該函數的作用是對包裝好的值進行操作:
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只能根據bind和return..所以,在定義單曲時.。你給出它的類型(這里是Wrapped a)然后說出它是如何return和bind行動有效。
最酷的是,這是一個如此普遍的模式,它彈出的地方到處都是,以一種純粹的方式封裝狀態只是其中之一。
至于對單曲的理解,不要太擔心。讀一讀你覺得有趣的東西,如果你不馬上理解的話,不要擔心。然后,只要潛入像Haskell這樣的語言就可以了。單簧管就是這樣一種東西,當你通過練習了解你的大腦時,有一天你突然意識到你理解了它們。
添加回答
舉報
0/150
提交
取消
