wvogel日記

自分用の技術備忘録が多めです.

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

そのままですね
バインドの定義を順番に追っていけば。

Identityは、モナド変換子からモナドを導出するのに利用できるそうですが、まだ変換子の勉強まで進んでいない