packages feed

MicroHs-0.12.6.1: lib/Data/Text/IO.hs

module Data.Text.IO (
  -- * File-at-a-time operations
  readFile,
  writeFile,
  appendFile,
  -- * Operations on handles
  hGetContents,
  hGetChunk,
  hGetLine,
  hPutStr,
  hPutStrLn,
  -- * Special cases for standard input and output
  interact,
  getContents,
  getLine,
  putStr,
  putStrLn,
) where

import Prelude hiding (readFile, writeFile)
import qualified Prelude as P
import Control.Exception (evaluate)
import qualified Data.ByteString as BS
import Data.Text
import Data.Text.Encoding
import System.IO (Handle, IOMode(..), hClose, openFile, stdin, stdout)
import qualified System.IO as IO

readFile :: FilePath -> IO Text
readFile f = do
  h <- openFile f ReadMode
  hGetContents h

writeFile :: FilePath -> Text -> IO ()
writeFile f bs = do
  h <- openFile f WriteMode
  hPutStr h bs
  hClose h

appendFile :: FilePath -> Text -> IO ()
appendFile f bs = do
  h <- openFile f AppendMode
  hPutStr h bs
  hClose h

hGetContents :: Handle -> IO Text
hGetContents h = do
  bs <- BS.hGetContents h
  evaluate (decodeUtf8 bs)

hGetChunk :: Handle -> IO Text
hGetChunk = hGetContents -- XXX: read chunk from buffer

hGetLine :: Handle -> IO Text
hGetLine h = do
  bs <- BS.hGetLine h
  evaluate (decodeUtf8 bs)

hPutStr :: Handle -> Text -> IO ()
hPutStr h t = BS.hPutStr h (encodeUtf8 t)

hPutStrLn :: Handle -> Text -> IO ()
hPutStrLn h t = hPutStr h t >> hPutStr h (pack "\n")

interact :: (Text -> Text) -> IO ()
interact f = getContents >>= putStr . f

getContents :: IO Text
getContents = hGetContents stdin

getLine :: IO Text
getLine = hGetLine stdin

putStr :: Text -> IO ()
putStr = hPutStr stdout

putStrLn :: Text -> IO ()
putStrLn = hPutStrLn stdout