Identity
モナドについて、今までStateモナドとGet,ついでにいえばApplicative程度しか使ったことがないので、その他のモナドも、
ttp://www.sampou.org/haskell/a-a-monads/html/
を参考に勉強していくことにする。
というわけで、まずは
Identityモナド
newtype Identity a = Identity { runIdentity :: a } instance Monad Identity where return a = Identity a (Identity x) >>= f = f x
このような定義だそう。
GHCiで実験
Prelude Control.Monad.Identity> let f x = [x] Prelude Control.Monad.Identity> f 5 [5] Prelude Control.Monad.Identity> [45] >>= f [45] Prelude Control.Monad.Identity> [45] >>= return [45]
お?
これはどういうことなのだろう。
型を調べる
(>>=) :: Monad m => m a -> (a -> m b) -> m b (>>=) f :: ([t] -> t -> b) -> t -> b return :: Monad m => a -> m a
そのままですね
バインドの定義を順番に追っていけば。