module CabalGild.Unstable.Class.MonadWrite where

import qualified CabalGild.Unstable.Type.Output as Output
import qualified Data.ByteString as ByteString

-- | A 'Monad' that can also write output, either to standard output (STDOUT)
-- or to a file.
class (Monad m) => MonadWrite m where
  -- | Writes output to the given 'Output.Output'.
  write :: Output.Output -> ByteString.ByteString -> m ()

-- | Uses 'ByteString.putStr' or 'ByteString.writeFile'.
instance MonadWrite IO where
  write :: Output -> ByteString -> IO ()
write Output
o = case Output
o of
    Output
Output.Stdout -> ByteString -> IO ()
ByteString.putStr
    Output.File FilePath
f -> FilePath -> ByteString -> IO ()
ByteString.writeFile FilePath
f