What have you found for these years?

2009-11-01

Reader Monad

看這一頁
The Reader monad

寫了個無聊的東西測試:

test :: Reader String Int
test = Reader read >>= \i -> return (i + 10) >>= \i -> return (i * 2)

跑 runReader test "150" 得到 320 :: Int
等價於

test' :: Reader String Int
test' = do
i <- Reader read
ii <- return (i + 10)
return (ii * 2)
這裡應該可以很明顯地看出 return 與 imperative language 裡的
return 是完完全全不一樣的。或許可以想成是一種 base constructor?

前幾天大概看了 List Monad 和 Maybe Monad,
感覺 monad 在基本概念上很簡單,但是組合起來變化很多,
看似簡潔的程式,背後其實透過 monad 的機制,是非常繁複的。

可以理解為什麼這邊是一個門檻,完全搞懂的話,可以做很多事。
simple and abstract :/

0 retries:

Post a Comment

All texts are licensed under CC Attribution 3.0