如果我有一堆 monad,比如说IO
, State
andError
和一个只使用IO
and的函数Error
。如何State
从堆栈中“删除”中间单子以便我可以使用我的函数?如果顺序是IO
, Error
, State
,我可以使用它来匹配类型,但是如果 monad 堆栈包含并且可能以任何顺序包含其他 monad lift
,我希望能够使用我的函数。例如:IO
Error
fun :: ErrorT String IO ()
fun = throwError "error"
someCode :: ErrorT String (StateT Int IO) ()
someCode = do
-- I want to use fun here