对于程序中不同级别的控制结构,我有两种类型声明。底部是Agent
, 一个StateT
具有IO
功能的。第二个是另一个StateT
有Agent
能力的,第三个(Plan
)是一个ErrorT
。
type Agent = StateT AgentState IO
type Plan = ErrorT PlanError (StateT PlanState Agent)
评估 a 的最佳方法是Plan
什么?我写了下面的代码,但它不是很少,因为有很多嵌套runStateT
和runErrorT
调用。
foo :: Plan ()
defaultAgentState :: AgentState
runStateT (runStateT (runErrorT foo) (PlanState 0)) defaultAgentState
有没有更简单/更好的东西?