data T b = E | N b (T b) (T b)
f :: T b -> Reader Int (T Int)
f (N i l r) = ask >>= \x -> local ((-)4) (f l) >>= \l' -> local ((-)1) (f r) >>= \r' -> return (N x l' r')
f E = return E
我在理解代碼的工作方式時遇到了問題。特別是,ask
如何知道環境在哪裏(在我們的案例中只是Int
)?讀者monad的「問」功能如何工作?
更確切地說:我是一個必要的程序員,在這樣的語言中很容易。可以在任何對象上調用方法,如:obj.f()
,或者當我們想要函數使用外部數據時,我們必須通過參數傳遞數據。
[Reader Monad Purpose]的可能重複(http://stackoverflow.com/questions/14178889/reader-monad-purpose) – MicroVirus
這是我本週見到的關於二叉樹和閱讀器單子的第二個或第三個問題([例如(http://stackoverflow.com/questions/36474647/haskell-reader-monads-depth-for-each-node-in-binary-tree))。來自MOOC課程作業還是其他內容? –