module Graflog.Console ( Console(..) , writeStdout' , enableStdoutLineBuffering ) where import Control.Monad.IO.Class (MonadIO(liftIO)) import Data.Text (Text) import qualified Data.Text.IO as T (putStrLn) import System.IO (hSetBuffering, stdout, BufferMode(..)) class Monad m => Console m where writeStdout :: Text -> m () writeStdout' :: MonadIO m => Text -> m () writeStdout' = liftIO . T.putStrLn -- this function forces stdout into line buffering mode; useful for CloudFormation logs enableStdoutLineBuffering :: MonadIO m => m () enableStdoutLineBuffering = liftIO $ hSetBuffering stdout LineBuffering instance Console IO where writeStdout = writeStdout'