標籤:

Category Theory for Programmers

最適合程序員入門範疇論的閱讀材料應該是國外一個物理學博士(也是個程序員)寫的Category Theory for Programmers 系列文章。這個系列還有相應的視頻系列(youtube)。

了解一個理論,抓住本質很重要。這個系列的第一章就介紹了,範疇論解決的問題就是,composition,組合。一個範疇,由object和arrow組成,而這個arrow的組合就是範疇論很重要的一部分。應用在編程上,就是可以把用範疇論的語言分析程序要做的事,把一個複雜程序分成許多小部分。這樣就可以降低程序的複雜度,提高代碼的復用行。

數學語言很抽象,看數學很容易太抽象然後抓不到重點,帶著組合這兩字看範疇論會方便很多。比如monad這個東西,看完monad的定義,雲里霧裡,但是想想monad跟組合的聯繫,就會方便很多。

我對monad的理解是,functor有時候傳入的fmap中的函數的返回值還是這個functor(endofunctor),這個時候就會變成兩層的結構。比如

fmap (x -> [x]) [1] // 放在ghci中執行返回的是[[1]],兩層[]

這個時候呢,實現一個monad,給出拆包的邏輯,就不需要每次處理這個兩層的包裝了。換句話說,monad讓這種函數可以更方便組合了,不會一層套一層了。

Category: The Essence of Composition 文章系列,組合的本質。

對應的視頻系列 用視頻講更好理解,不過有些地方會漏掉。

推薦閱讀:

範疇論學習筆記12:函子和極限
範疇論學習筆記18:可表函子和普遍元素
範疇論學習筆記21:單子(Monad)

TAG:範疇論 |