packages feed

systemd-socket-activation-1.0.0.2: src/SocketActivation/IO.hs

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' { run :: IO (Either Error a) }
    deriving (Functor, Applicative, Monad, MonadIO) via ExceptT Error IO

throwError :: Error -> IO' a
throwError = IO' . return . Left