Futureスマートフォン用の表示で見るスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。長かった連載もこれで最後です。do?IOActionのファクトリメソッドapplyは引数にA型の式をとりIOAction[A]を返します。たしかに「unit」のように見えます、そうではないのですが、今はだいたい同じでいいです。flatMapがこのモナドのためにすることを知っているならモナド則は我々にそれとunitを使ってマップを作成する方法を教えてくれます。A=>IOAction[B]):IOAction[B]のようなものを必要とします。whirl.それにやらせたいことはアクションを返す関数のための連鎖したアクションであり、活性化したとき2つのアクションを順に実行するものです。putString(y)}は新しいIOActionモナドとなるべきであり、活性化されると最初にgetStringアクションを活性化しそれからputStringが返すアクションを実行します。ChainedAction.IOActionのファクトリとSimpleActionは変わっていません。IOActionはモナドメソッドを加えました。モナド則に従って、mapは単にflatMapとさしあたりunitとして使っているものを利用して実装しています。flatMapはChainedActionという新しいIOActionの実装への難しい責務を任せています。object.ChainedActionにおけるトリックはそのapplyメソッドです。初めaction1を1番目の世界の状態で呼び出します。これは2番目の世界の状態と中間結果が結果となります。それがつなぐ関数は結果を必要とし、戻り値として他のアクションであるaction2を生成します。action2は2番目の席あの状態とともに呼び出し、出てくるタプルを最終結果とします。内部的なWorldStateオブジェクトをmain関数に渡さない限りこのどれもが起こらないことを覚えておいてください。"for".getStringとputStringがcreateGetStringAction/createPutStringActionのような何かになぜ名前を変更しないのかある時点で不思議に思うかもしれません。実際それらがやっていることがそうだからです。IOActions.これはまるで「for」とgetString/putStringが複雑なIOActionを作成するためだけにミニ言語を作成しようとともに動いているかのようです。turn.さて我々が成し遂げたことを総括するいい機会です。IOApplicationは純粋な配管です。ユーザーがそのサブクラスを作りmainから呼び出されるiomainというメソッドを作成します。IOActionを言い換えましょう。実際IOActionは単一のアクションでも連結したいくつかのアクションでもあるかもしれません。このIOActionはその作業をする前にWorldStateオブジェクトを「待って」いるだけです。ChainedActionクラスはWorldStateが順番に各連結したアクションを通じて変更され通されたことを保証する責務があります。do.getStringとputStringはその名前が指し示すように実際にStringを取得したり設定したりしません。代わりにIOActionを生成します。IOActionはモナドであるため、それを「for」構文に突き通すことができますし結果はまるでgetString/putStringが実際に名前の通りのことをやっているかのように見えます。it.いいスタートです。IOActionにおけるほぼ完璧なできのモナドを手に入れました。