packages feed

systemd-socket-activation-1: 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

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