関数モナドについて調べてみたのですが、理解できなかったので質問させてください。
これを使用したときに以下のようになると思います。
上記の場合
同様に、`f (h w) w` を単純に置き換えると
おかしいのは理解できています。
これはどのように考えたらよいのでしょうか ?
instance Monad ((->) r) where return = const h >>= f = \w -> f (h w) w
これを使用したときに以下のようになると思います。
ghci> f = (+1) >>= \a -> (+2) >>= \b -> return (a+b) f :: Num b => b -> b ghci> f 1 5 it :: Num b => b
上記の場合
h w
は (+1) 1
に置き換えられると考えています。同様に、`f (h w) w` を単純に置き換えると
(+2) ((+1) 1) 1
になってしまいますがおかしいのは理解できています。
これはどのように考えたらよいのでしょうか ?