-- | Defines a monad context for writing a file to disc.

module Capabilities.WriteFile (
  MonadWriteFile (..),
  ) where

import Control.Monad.Trans.Class        (MonadTrans (lift))
import Control.OutputCapable.Blocks.Generic (
  GenericReportT
  )
import Data.ByteString                  (ByteString)

class Monad m => MonadWriteFile m where
  writeToFile :: FilePath -> ByteString -> m ()

instance MonadWriteFile m => MonadWriteFile (GenericReportT l o m)  where
  writeToFile :: FilePath -> ByteString -> GenericReportT l o m ()
writeToFile FilePath
path = m () -> GenericReportT l o m ()
forall (m :: * -> *) a. Monad m => m a -> GenericReportT l o m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (m () -> GenericReportT l o m ())
-> (ByteString -> m ()) -> ByteString -> GenericReportT l o m ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. FilePath -> ByteString -> m ()
forall (m :: * -> *).
MonadWriteFile m =>
FilePath -> ByteString -> m ()
writeToFile FilePath
path