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
no subject
Date: 2006-12-05 06:16 am (UTC)В данном случае, скорее всего обработка не нужна и у тебя уже будет готовая функция liftState2 = lift . lift, тогда
Примерно так.
no subject
Date: 2006-12-05 06:48 am (UTC)уже содержит слифтенный get, то у тебя получился лишний lift
PS: и вообще, я уже наелся этими трансформерами
no subject
Date: 2006-12-05 06:55 am (UTC)Промазал немного
no subject
Date: 2006-12-05 08:33 am (UTC)А что наелся? Что взамен то?
no subject
Date: 2006-12-05 11:41 am (UTC)no subject
Date: 2006-12-05 11:49 am (UTC)