achille-0.0.0: src/Achille/Writable.hs
{-# LANGUAGE TypeSynonymInstances #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE MultiParamTypeClasses #-}
-- | Defines an interface for things that can be written to disk.
module Achille.Writable where
import Data.Text as Text
import qualified Data.Text.Lazy as LT
import Data.Text.Encoding (encodeUtf8)
import qualified Data.Text.Lazy.Encoding as LT (encodeUtf8)
import Data.ByteString as BS
import Data.ByteString.Lazy as LBS
import qualified Data.ByteString.Lazy as ByteString
import Achille.Internal.IO as AchilleIO
-- | Class for things that can be saved.
class Writable m a where
write :: FilePath -> a -> m ()
instance AchilleIO m => Writable m [Char] where
write to = write to . Text.pack
instance AchilleIO m => Writable m Text where
write to = AchilleIO.writeFile to . encodeUtf8
instance AchilleIO m => Writable m LT.Text where
write to = AchilleIO.writeFileLazy to . LT.encodeUtf8
instance AchilleIO m => Writable m BS.ByteString where
write = AchilleIO.writeFile
instance AchilleIO m => Writable m LBS.ByteString where
write = AchilleIO.writeFileLazy