module SocketActivation.IO where import Control.Applicative (Applicative) import Control.Monad (Functor, Monad (return)) import Control.Monad.IO.Class (MonadIO) import Control.Monad.Trans.Except (ExceptT (..)) import Data.Either (Either (Left)) import Data.Function ((.)) import System.IO (IO) import SocketActivation.Concepts newtype IO' a = IO' { IO' a -> IO (Either Error a) run :: IO (Either Error a) } deriving (a -> IO' b -> IO' a (a -> b) -> IO' a -> IO' b (forall a b. (a -> b) -> IO' a -> IO' b) -> (forall a b. a -> IO' b -> IO' a) -> Functor IO' forall a b. a -> IO' b -> IO' a forall a b. (a -> b) -> IO' a -> IO' b forall (f :: * -> *). (forall a b. (a -> b) -> f a -> f b) -> (forall a b. a -> f b -> f a) -> Functor f <$ :: a -> IO' b -> IO' a $c<$ :: forall a b. a -> IO' b -> IO' a fmap :: (a -> b) -> IO' a -> IO' b $cfmap :: forall a b. (a -> b) -> IO' a -> IO' b Functor, Functor IO' a -> IO' a Functor IO' -> (forall a. a -> IO' a) -> (forall a b. IO' (a -> b) -> IO' a -> IO' b) -> (forall a b c. (a -> b -> c) -> IO' a -> IO' b -> IO' c) -> (forall a b. IO' a -> IO' b -> IO' b) -> (forall a b. IO' a -> IO' b -> IO' a) -> Applicative IO' IO' a -> IO' b -> IO' b IO' a -> IO' b -> IO' a IO' (a -> b) -> IO' a -> IO' b (a -> b -> c) -> IO' a -> IO' b -> IO' c forall a. a -> IO' a forall a b. IO' a -> IO' b -> IO' a forall a b. IO' a -> IO' b -> IO' b forall a b. IO' (a -> b) -> IO' a -> IO' b forall a b c. (a -> b -> c) -> IO' a -> IO' b -> IO' c forall (f :: * -> *). Functor f -> (forall a. a -> f a) -> (forall a b. f (a -> b) -> f a -> f b) -> (forall a b c. (a -> b -> c) -> f a -> f b -> f c) -> (forall a b. f a -> f b -> f b) -> (forall a b. f a -> f b -> f a) -> Applicative f <* :: IO' a -> IO' b -> IO' a $c<* :: forall a b. IO' a -> IO' b -> IO' a *> :: IO' a -> IO' b -> IO' b $c*> :: forall a b. IO' a -> IO' b -> IO' b liftA2 :: (a -> b -> c) -> IO' a -> IO' b -> IO' c $cliftA2 :: forall a b c. (a -> b -> c) -> IO' a -> IO' b -> IO' c <*> :: IO' (a -> b) -> IO' a -> IO' b $c<*> :: forall a b. IO' (a -> b) -> IO' a -> IO' b pure :: a -> IO' a $cpure :: forall a. a -> IO' a $cp1Applicative :: Functor IO' Applicative, Applicative IO' a -> IO' a Applicative IO' -> (forall a b. IO' a -> (a -> IO' b) -> IO' b) -> (forall a b. IO' a -> IO' b -> IO' b) -> (forall a. a -> IO' a) -> Monad IO' IO' a -> (a -> IO' b) -> IO' b IO' a -> IO' b -> IO' b forall a. a -> IO' a forall a b. IO' a -> IO' b -> IO' b forall a b. IO' a -> (a -> IO' b) -> IO' b forall (m :: * -> *). Applicative m -> (forall a b. m a -> (a -> m b) -> m b) -> (forall a b. m a -> m b -> m b) -> (forall a. a -> m a) -> Monad m return :: a -> IO' a $creturn :: forall a. a -> IO' a >> :: IO' a -> IO' b -> IO' b $c>> :: forall a b. IO' a -> IO' b -> IO' b >>= :: IO' a -> (a -> IO' b) -> IO' b $c>>= :: forall a b. IO' a -> (a -> IO' b) -> IO' b $cp1Monad :: Applicative IO' Monad, Monad IO' Monad IO' -> (forall a. IO a -> IO' a) -> MonadIO IO' IO a -> IO' a forall a. IO a -> IO' a forall (m :: * -> *). Monad m -> (forall a. IO a -> m a) -> MonadIO m liftIO :: IO a -> IO' a $cliftIO :: forall a. IO a -> IO' a $cp1MonadIO :: Monad IO' MonadIO) via ExceptT Error IO throwError :: Error -> IO' a throwError :: Error -> IO' a throwError = IO (Either Error a) -> IO' a forall a. IO (Either Error a) -> IO' a IO' (IO (Either Error a) -> IO' a) -> (Error -> IO (Either Error a)) -> Error -> IO' a forall b c a. (b -> c) -> (a -> b) -> a -> c . Either Error a -> IO (Either Error a) forall (m :: * -> *) a. Monad m => a -> m a return (Either Error a -> IO (Either Error a)) -> (Error -> Either Error a) -> Error -> IO (Either Error a) forall b c a. (b -> c) -> (a -> b) -> a -> c . Error -> Either Error a forall a b. a -> Either a b Left