如何解釋 Haskell 中的單子?

題主你這個問題是難住我了,這是一個非常難的數學問題。首先我們要知道什麼是數學中子結構,然後怎麼樣去解讀這個結構,是我們了解Haskell的重點。Monad是一種數學結構,haskell中的Monad意義和數學上的意義是一樣的。簡單的說單子(Monad)就是自函子範疇上的一個幺半群。這個幺半群的態射是作用在自函子上的自然變換,其單位態射是haskell中class Monad 的return函數(這個實際上是個自然變換)。而這個幺半群的態射的組合操作(composition)則是haskell中class Monad的join函數,也是一個自然變換。


上面給你進行了大概的解釋,不知道你聽懂沒有。其實我們想要研究這一類的數學問題,你要鍛煉好你的邏輯,隨時隨地可以在腦子裡列等式,畫圖。Monad其實可以簡單的看成是一個Functor(函子),而且是個自函子(haskell中所有的函子都是自函子)。只不過Monad相對於其他普通Functor有更多的約束,用typeclass的繼承關係來看是Functor=>Applicative=>Monad(ghc 7.10將會執行這一標準,ghc 7.8將對沒有按此標準定義的Monad代碼提出警告)。


大家如果不是數學領域的話,了解一下概念就醒了,如果是鑽研數學問題的話,我的知識含量也只能解答到這裡啦。

希望對你有用。



在haskell中,Monad也只是一個有自己特殊性質的typeclass。如果想要一個類型是monad的,必須實現Monad類型類,而實現Monad typeclass,只需至少實現(>>=)函數即可。


推薦閱讀:

Go 語法糖水 - 單元測試
雲時代的編程模式將會走向何方?
第一篇:關於開發環境
有哪些有趣又優美的編程語言?

TAG:編程 | Haskell | 編程語言 | 計算機 |