有沒有對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秋納筆試