The Identity monad
概観
計算のタイプ: |
単純な関数適用 |
束縛戦略: |
束縛関数が入力に適用される
Identity x >>= f == Identity (f x)
|
利用場面: |
恒等モナドに適用されたモナド変換子からモナドを導出できる |
ゼロおよびプラス: |
なし |
型の例: |
Identity a |
動機
恒等モナドは計算戦略を内包しないモナドです。
計算としては、単純に関数をその引数に適用するというはるかに単純な操作の
代りに恒等モナドを使う理由はなにもありません。恒等モナドの目的は、
(Part III でカバーする)モナド変換子の理論における基本的役割にあります。
恒等モナドに適用されるどんなモナド変換子もそのモナドの非変換子版と同じ
になります。
定義
newtype Identity a = Identity { runIdentity :: a }
instance Monad Identity where
return a = Identity a -- i.e. return = id
(Identity x) >>= f = f x -- i.e. x >>= f = f x
|
型定義でラベル runIdentity
が使われているのは、モナド値を
計算として明示的に表現するモナド定義のスタイルにしたがったためです。
このスタイルでは、モナド計算はモナド演算子をつかって構築され、計算の値は
run******
関数使って取り出されます。恒等モナドはなんの計算
もしませんので、その定義は自明です。このモナドのスタイルの、よりよい例に
ついては State モナドを参照してください。
Example
恒等モナドの典型的な使い方はモナド変換子からモナドを導出する
というものです。
-- モナド変換子 StateT を使って State モナドを導出する
type State s a = StateT s Identity a
|