-- | A locale-aware replacement for the standard IO routines

module LocaleIO(
    putStr,
    putStrLn,
    putErr, 
    putErrLn, 
    putErrDie, 
    LocaleIO.readFile, 
    LocaleIO.print, 
    LocaleIO.hGetContents
    ) where

import Prelude hiding(putStr, putStrLn)
import qualified Prelude
import IO hiding(putStr, putStrLn)
import IConv
import System
import Char

toUTF8 s = stringToBytes s >>= return . map (chr . fromIntegral) 
fromUTF8 s = bytesToString (map (fromIntegral . ord) s) 


putStr x = toUTF8 x >>= Prelude.putStr
putStrLn x = toUTF8 x >>= Prelude.putStrLn
putErr s = hFlush stdout >> toUTF8 s >>= IO.hPutStr IO.stderr 
putErrLn s = hFlush stdout >> toUTF8 s >>= IO.hPutStrLn IO.stderr 
putErrDie s = hFlush stdout >> (toUTF8 s >>= IO.hPutStrLn IO.stderr)  >> System.exitFailure
print x = putStrLn $ show x

readFile fn = Prelude.readFile fn >>= \s ->  fromUTF8 s
hGetContents h =  IO.hGetContents h >>= \s -> fromUTF8 s
