module DeepControl.Monad.Trans.Except (
module Control.Monad.Except,
) where
import DeepControl.Applicative
import DeepControl.Monad
import DeepControl.Commutative
import Control.Monad.Except
import Control.Monad.Identity
instance Monad2 (Except e) where
m >>== f = (ExceptT . Identity |$>) $ (runExcept |$> m) >>== runExcept |$>> f
instance Monad3 (Except e) where
m >>>== f = (ExceptT . Identity |$>>) $ (runExcept |$>> m) >>>== runExcept |$>>> f
instance Monad4 (Except e) where
m >>>>== f = (ExceptT . Identity |$>>>) $ (runExcept |$>>> m) >>>>== runExcept |$>>>> f
instance Monad5 (Except e) where
m >>>>>== f = (ExceptT . Identity |$>>>>) $ (runExcept |$>>>> m) >>>>>== runExcept |$>>>>> f
instance Commutative (Except e) where
commute x = ExceptT . Identity |$> commute (runExcept $ x)