Если у меня есть стек монад, скажем 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
