module Effects.FileSystem.FileWriter
(
MonadFileWriter (..),
OsPath,
writeFileUtf8,
appendFileUtf8,
FS.UTF8.encodeUtf8,
ByteString,
Text,
)
where
import Control.Monad.Trans.Class (MonadTrans (lift))
import Control.Monad.Trans.Reader (ReaderT)
import Data.ByteString (ByteString)
import Data.Text (Text)
import FileSystem.IO qualified as FS.IO
import FileSystem.OsPath (OsPath)
import FileSystem.UTF8 qualified as FS.UTF8
import GHC.Stack (HasCallStack)
class (Monad m) => MonadFileWriter m where
writeBinaryFile :: (HasCallStack) => OsPath -> ByteString -> m ()
appendBinaryFile :: (HasCallStack) => OsPath -> ByteString -> m ()
instance MonadFileWriter IO where
writeBinaryFile :: HasCallStack => OsPath -> ByteString -> IO ()
writeBinaryFile = OsPath -> ByteString -> IO ()
FS.IO.writeBinaryFileIO
{-# INLINEABLE writeBinaryFile #-}
appendBinaryFile :: HasCallStack => OsPath -> ByteString -> IO ()
appendBinaryFile = OsPath -> ByteString -> IO ()
FS.IO.appendBinaryFileIO
{-# INLINEABLE appendBinaryFile #-}
instance (MonadFileWriter m) => MonadFileWriter (ReaderT env m) where
writeBinaryFile :: HasCallStack => OsPath -> ByteString -> ReaderT env m ()
writeBinaryFile OsPath
p = m () -> ReaderT env m ()
forall (m :: * -> *) a. Monad m => m a -> ReaderT env m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (m () -> ReaderT env m ())
-> (ByteString -> m ()) -> ByteString -> ReaderT env m ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. OsPath -> ByteString -> m ()
forall (m :: * -> *).
(MonadFileWriter m, HasCallStack) =>
OsPath -> ByteString -> m ()
writeBinaryFile OsPath
p
{-# INLINEABLE writeBinaryFile #-}
appendBinaryFile :: HasCallStack => OsPath -> ByteString -> ReaderT env m ()
appendBinaryFile OsPath
p = m () -> ReaderT env m ()
forall (m :: * -> *) a. Monad m => m a -> ReaderT env m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (m () -> ReaderT env m ())
-> (ByteString -> m ()) -> ByteString -> ReaderT env m ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. OsPath -> ByteString -> m ()
forall (m :: * -> *).
(MonadFileWriter m, HasCallStack) =>
OsPath -> ByteString -> m ()
appendBinaryFile OsPath
p
{-# INLINEABLE appendBinaryFile #-}
writeFileUtf8 :: (HasCallStack, MonadFileWriter m) => OsPath -> Text -> m ()
writeFileUtf8 :: forall (m :: * -> *).
(HasCallStack, MonadFileWriter m) =>
OsPath -> Text -> m ()
writeFileUtf8 OsPath
p = OsPath -> ByteString -> m ()
forall (m :: * -> *).
(MonadFileWriter m, HasCallStack) =>
OsPath -> ByteString -> m ()
writeBinaryFile OsPath
p (ByteString -> m ()) -> (Text -> ByteString) -> Text -> m ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Text -> ByteString
FS.UTF8.encodeUtf8
{-# INLINEABLE writeFileUtf8 #-}
appendFileUtf8 :: (HasCallStack, MonadFileWriter m) => OsPath -> Text -> m ()
appendFileUtf8 :: forall (m :: * -> *).
(HasCallStack, MonadFileWriter m) =>
OsPath -> Text -> m ()
appendFileUtf8 OsPath
p = OsPath -> ByteString -> m ()
forall (m :: * -> *).
(MonadFileWriter m, HasCallStack) =>
OsPath -> ByteString -> m ()
appendBinaryFile OsPath
p (ByteString -> m ()) -> (Text -> ByteString) -> Text -> m ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Text -> ByteString
FS.UTF8.encodeUtf8
{-# INLINEABLE appendFileUtf8 #-}