module Data.Streaming.Process.Internal
( StreamingProcessHandle (..)
, InputSource (..)
, OutputSink (..)
) where
import Control.Concurrent.STM (TMVar)
import System.Exit (ExitCode)
import System.IO (Handle)
import System.Process (ProcessHandle, StdStream (CreatePipe))
class InputSource a where
isStdStream :: (Maybe Handle -> IO a, Maybe StdStream)
instance InputSource Handle where
isStdStream :: (Maybe Handle -> IO Handle, Maybe StdStream)
isStdStream = (\(Just Handle
h) -> Handle -> IO Handle
forall (m :: * -> *) a. Monad m => a -> m a
return Handle
h, StdStream -> Maybe StdStream
forall a. a -> Maybe a
Just StdStream
CreatePipe)
class OutputSink a where
osStdStream :: (Maybe Handle -> IO a, Maybe StdStream)
instance OutputSink Handle where
osStdStream :: (Maybe Handle -> IO Handle, Maybe StdStream)
osStdStream = (\(Just Handle
h) -> Handle -> IO Handle
forall (m :: * -> *) a. Monad m => a -> m a
return Handle
h, StdStream -> Maybe StdStream
forall a. a -> Maybe a
Just StdStream
CreatePipe)
data StreamingProcessHandle = StreamingProcessHandle
ProcessHandle
(TMVar ExitCode)
(IO ())