type MyCoolT = StateT MyData1 (ErrorT String (StateT MyData2 IO)) () updateBoth :: (MyData1 -> MyData1) -> (MyData2 -> MyData2) -> MyCoolT updateBoth funOnType1 funOnType2 = do modify funOnType1 lift $ catchError (lift $ modify funOnType2 >> (lift $ print "xe-xe")) (\e -> liftIO $ print "Error! :-)")
updateBoth :: (MyData1 -> MyData1) -> (MyData2 -> MyData2) -> MyCoolT updateBoth funOnType1 funOnType2 = do modify funOnType1 liftState2 $ modify funOnType2
Other options:
no subject
В данном случае, скорее всего обработка не нужна и у тебя уже будет готовая функция liftState2 = lift . lift, тогда
Примерно так.