2011年12月24日土曜日

State, StateT

クリスマスイブらしいよ!
私は家で引きこもってるけど!
State

状態を保持する計算に用いられます。


Stateは!で値を、~>で状態を、applyで両方をとりだせます。
値、状態を取り出すときには、初期状態を与えなければなりません。



値や状態を操作するための関数はStatesに定義されています。

init

状態で値を初期化します。

put

状態を上書きします。

gets

状態から値を更新します。

modify

状態から状態を更新します。

state

状態から値と状態を更新します。


IdentityにもStateを作る関数が定義されています。

state

呼び出し元を初期値にします。

constantState

呼び出し元を初期値にし、初期状態を与えます。


State#withsは入力される状態を更新します。


StateT


モナド変換子版もあります。


mapsにより別のモナドにmapすることもできます。


Writerは結合していくことしか出来ませんでしたが、Stateではもう少し自由度が高いというイメージです。
ScalaはvarがあるからStateモナドとかいらないのでは?と思っていましたが、実際に調べて書いてみると可変な参照とはまた違ったもので、これはこれで使い方がありそうです。
STモナドはいりません。

0 件のコメント:

コメントを投稿