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
)?Readerモナドの「質問」機能はどのように機能しますか?
より正確には:私は不可欠プログラマだと、このような言語では、それは簡単です。メソッドは、obj.f()
のようなオブジェクトで呼び出すことができます。または、関数が外部データを使用するためには、引数でデータを渡す必要があります。
[Reader Monad Purpose](http://stackoverflow.com/questions/14178889/reader-monad-purpose)の可能な複製 – MicroVirus
これは私が今週見た2番目または3番目の質問です。 ([例](http://stackoverflow.com/questions/36474647/haskell-reader-monads-depth-for-each-node-in-binary-tree))。それはMOOCのコースの割り当てなどですか? –