module Data.IOString
( IOString
, writeFile
, readFile
, appendFile
, putStr
, putStrLn
, FilePath
) where
import Data.Char (Char)
import Data.Function (($), (.))
import GHC.IO (FilePath, IO)
import qualified System.IO as Base
import Control.Monad.IO.Class (MonadIO, liftIO)
import qualified Data.ByteString.Char8 as BS
import qualified Data.ByteString.Lazy.Char8 as BL
import qualified Data.Text as T
import qualified Data.Text.IO as T
import qualified Data.Text.Lazy as TL
import qualified Data.Text.Lazy.IO as TL
import Path
class IOString s where
iosWriteFile :: FilePath -> s -> IO ()
iosReadFile :: FilePath -> IO s
iosAppendFile :: FilePath -> s -> IO ()
iosPutStr :: s -> IO ()
iosPutStrLn :: s -> IO ()
instance IOString T.Text where
iosWriteFile = T.writeFile
iosReadFile = T.readFile
iosAppendFile = T.appendFile
iosPutStr = T.putStr
iosPutStrLn = T.putStrLn
instance IOString TL.Text where
iosWriteFile = TL.writeFile
iosReadFile = TL.readFile
iosAppendFile = TL.appendFile
iosPutStr = TL.putStr
iosPutStrLn = TL.putStrLn
instance IOString BS.ByteString where
iosWriteFile = BS.writeFile
iosReadFile = BS.readFile
iosAppendFile = BS.appendFile
iosPutStr = BS.putStr
iosPutStrLn = BS.putStrLn
instance IOString BL.ByteString where
iosWriteFile = BL.writeFile
iosReadFile = BL.readFile
iosAppendFile = BL.appendFile
iosPutStr = BL.putStr
iosPutStrLn = BL.putStrLn
instance IOString [Char] where
iosWriteFile = Base.writeFile
iosReadFile = Base.readFile
iosAppendFile = Base.appendFile
iosPutStr = Base.putStr
iosPutStrLn = Base.putStrLn
writeFile :: (IOString s, MonadIO m) => Path Abs File -> s -> m ()
writeFile p s = liftIO $ iosWriteFile (toFilePath p) s
readFile :: (IOString s, MonadIO m) => Path Abs File -> m s
readFile = liftIO . iosReadFile . toFilePath
appendFile :: (IOString s, MonadIO m) => Path Abs File -> s -> m ()
appendFile p s = liftIO $ iosAppendFile (toFilePath p) s
putStr :: (IOString s, MonadIO m) => s -> m ()
putStr = liftIO . iosPutStr
putStrLn :: (IOString s, MonadIO m) => s -> m ()
putStrLn = liftIO . iosPutStrLn