У меня есть два объявления типа для управляющих структур на разных уровнях в программе. Нижний - Agent
, StateT
с возможностями IO
. Второй - это StateT
с Agent
возможностями, а третий (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
Есть ли что-нибудь попроще / приятнее?