モナドのスタック、たとえば、、、IO
およびState
とのみError
を使用する関数がある場合。関数を使用できるように、スタックから中央のモナドを「削除」するにはどうすればよいでしょうか。順序が、、、の場合、タイプを一致させるために使用できますが、モナドスタックに、場合によっては他のモナドが任意の順序で含まれている場合は、関数を使用できるようにしたいと思います。例えば:IO
Error
State
IO
Error
State
lift
IO
Error
fun :: ErrorT String IO ()
fun = throwError "error"
someCode :: ErrorT String (StateT Int IO) ()
someCode = do
-- I want to use fun here