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 (Error)

newtype IO' a = IO' { forall a. IO' a -> IO (Either Error a)
run :: IO (Either Error a) }
    deriving (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
<$ :: forall a b. a -> IO' b -> IO' a
$c<$ :: forall a b. a -> IO' b -> IO' a
fmap :: forall a b. (a -> b) -> IO' a -> IO' b
$cfmap :: forall a b. (a -> b) -> IO' a -> IO' b
Functor, Functor IO'
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
<* :: forall a b. IO' a -> IO' b -> IO' a
$c<* :: forall a b. IO' a -> IO' b -> IO' a
*> :: forall a b. IO' a -> IO' b -> IO' b
$c*> :: forall a b. IO' a -> IO' b -> IO' b
liftA2 :: forall a b c. (a -> b -> c) -> IO' a -> IO' b -> IO' c
$cliftA2 :: forall a b c. (a -> b -> c) -> IO' a -> IO' b -> IO' c
<*> :: forall a b. IO' (a -> b) -> IO' a -> IO' b
$c<*> :: forall a b. IO' (a -> b) -> IO' a -> IO' b
pure :: forall a. a -> IO' a
$cpure :: forall a. a -> IO' a
Applicative, Applicative IO'
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 :: forall a. a -> IO' a
$creturn :: forall a. a -> IO' a
>> :: forall a b. IO' a -> IO' b -> IO' b
$c>> :: forall a b. IO' a -> IO' b -> IO' b
>>= :: forall a b. IO' a -> (a -> IO' b) -> IO' b
$c>>= :: forall a b. IO' a -> (a -> IO' b) -> IO' b
Monad, Monad IO'
forall a. IO a -> IO' a
forall (m :: * -> *).
Monad m -> (forall a. IO a -> m a) -> MonadIO m
liftIO :: forall a. IO a -> IO' a
$cliftIO :: forall a. IO a -> IO' a
MonadIO) via ExceptT Error IO

throwError :: Error -> IO' a
throwError :: forall a. Error -> IO' a
throwError = forall a. IO (Either Error a) -> IO' a
IO' forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (m :: * -> *) a. Monad m => a -> m a
return forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a b. a -> Either a b
Left