有沒有對Haskell中理解monad比較好的代碼例子?

最近在看haskell 看到函子那一塊和後面的monad那裡就感覺有點吃力了:(有沒有什麼好點的例子能助我理解和應用的例子呢?最好有代碼的那種500行代碼以內都能接受,比如寫一個簡單的解析器什麼的(應該是不會這麼簡單的吧)(今有一點點基礎,最好不依賴庫,不然又有一堆東西……)對了剛開始沒有做題現在h99做到30幾,cis194做到13spring第4部分homework,差不多是個純小白了:((還是希望多動手 感覺理解更深刻吧)感謝!


Monads - What I Wish I Knew When Learning Haskell


Wadler: Monads

  • Comprehending monads
  • Monads for functional programming
  • The essence of functional programming

代碼例子挺好的, 部分內容有點重複, 就是Notation 有點舊


Monadic IO System: IO inside - HaskellWiki

這篇從purity和compiler角度,描寫了monad被發現的動機

我覺得比那些一上來就寫定義的文章,要更好一些,

背景對理解抽象的概念很有幫助。

當然一種數學結構(structure)一旦被發現之後,其應用範圍就不受限了,

理解了Monadic IO System之後,其他monad也容易理解多了。


比如寫一個簡單的解析器什麼的(應該是不會這麼簡單的吧)

一個簡單的解析器當然很簡單,比如

data Parser a = P (String -&> [(a,String)])
instance Monad Parser where
return x = P s -&> [(x,s)]
(&>&>=) = balabala
charP :: Char -&> Parser Char
charP c = P f
where
f [] = []
f (x:xs) = [(x,xs)|x==c]

stringP :: String -&> Parser String
stringP "" = return ""
--如果實現了Monad類型類,就可以這麼寫
stringP s@(x:xs) = charP x &>&> stringP xs &>&> return s

代碼隨手敲的,不確定能不能過編譯。。。。。

可以去做一下這一題


推薦閱讀:

Haskell做APP後端開發能有性能上的飛躍么?
Haskell用在工程項目中有什麼優勢?
ZJU Lambda2017秋納筆試

TAG:函數式編程 | Haskell |