3

プログラムのさまざまなレベルの制御構造に対して2つの型宣言があります。一番下は、Agent機能付きStateTのです。IO2つ目は機能を備えた別のものStateTAgent、3つ目(Plan)はErrorT。です。

type Agent = StateT AgentState IO
type Plan = ErrorT PlanError (StateT PlanState Agent)

評価するための最良の方法は何Planですか?runStateT私は次のコードを書きましたが、ネストされたrunErrorT呼び出しがたくさんあるため、それほど便利ではありません。

foo :: Plan ()
defaultAgentState :: AgentState
runStateT (runStateT (runErrorT foo) (PlanState 0)) defaultAgentState

もっとシンプルで素敵なものはありますか?

4

1 に答える 1

6

モナド変換子スタックがある場合runXyzT、個々の変圧器の各機能をある時点で呼び出す必要がありますが、残念ながら近道はありません。

ただし、特定のスタックを複数回使用する場合は、特別なrunMyStack関数を定義して、スタックの乱雑runXyzTさが一点にしか現れないようにすることをお勧めします。

于 2012-02-23T16:31:54.963 に答える