module Agda.Utils.IO
  ( readBinaryFile'
  , readTextFile
  , module System.IO.UTF8
  ) where

import System.IO.UTF8
import qualified System.IO.UTF8 as UTF8
import qualified System.IO as IO
import qualified Data.ByteString.Lazy as BS
import Control.Applicative

import Agda.Utils.Unicode

-- | Returns a close function for the file together with the contents.

readBinaryFile' :: FilePath -> IO (BS.ByteString, IO ())
readBinaryFile' file = do
    h <- IO.openBinaryFile file IO.ReadMode
    s <- BS.hGetContents h
    return (s, IO.hClose h)

-- | Reads a UTF8-encoded file in binary mode and converts all Unicode
-- line endings into '\n'.

readTextFile :: FilePath -> IO String
readTextFile file = convertLineEndings <$> UTF8.readFile file