eventlog-live-0.3.0.0: src/GHC/Eventlog/Live/Machine/Sink.hs
{- |
Module : GHC.Eventlog.Live.Machine.Sink
Description : Machines for processing eventlog data.
Stability : experimental
Portability : portable
-}
module GHC.Eventlog.Live.Machine.Sink (
-- * Eventlog file sink
fileSink,
fileSinkBatch,
) where
import Control.Monad.IO.Class (MonadIO (..))
import Data.ByteString qualified as BS
import Data.Machine (ProcessT, await, repeatedly, (~>))
import Data.Void (Void)
import GHC.Eventlog.Live.Machine.Core (Tick (..), dropTick)
import System.IO (Handle)
-------------------------------------------------------------------------------
-- Log file sink
{- |
File sink for optional eventlog log file.
-}
fileSink ::
(MonadIO m) =>
Handle ->
ProcessT m BS.ByteString Void
fileSink handle = repeatedly $ await >>= liftIO . BS.hPut handle
-------------------------------------------------------------------------------
-- Log file sink with batches
{- |
File sink for optional eventlog log file.
-}
fileSinkBatch ::
(MonadIO m) =>
Handle ->
ProcessT m (Tick BS.ByteString) Void
fileSinkBatch handle = dropTick ~> fileSink handle