#if __GLASGOW_HASKELL__ >= 702
#endif
module System.IO.Streams.Handle
(
handleToInputStream
, handleToOutputStream
, stdin
, stdout
, stderr
) where
import Data.ByteString (ByteString)
import qualified Data.ByteString as S
import System.IO (Handle, hFlush)
import qualified System.IO as IO
import System.IO.Unsafe (unsafePerformIO)
import System.IO.Streams.Internal (InputStream, OutputStream,
lockingInputStream,
lockingOutputStream,
makeInputStream,
makeOutputStream)
bUFSIZ :: Int
bUFSIZ = 32752
handleToInputStream :: Handle -> IO (InputStream ByteString)
handleToInputStream h = makeInputStream f
where
f = do
x <- S.hGetSome h bUFSIZ
return $! if S.null x then Nothing else Just x
handleToOutputStream :: Handle -> IO (OutputStream ByteString)
handleToOutputStream h = makeOutputStream f
where
f Nothing = return $! ()
f (Just x) = if S.null x
then hFlush h
else S.hPut h x
stdin :: InputStream ByteString
stdin = unsafePerformIO (handleToInputStream IO.stdin >>= lockingInputStream)
stdout :: OutputStream ByteString
stdout = unsafePerformIO (handleToOutputStream IO.stdout >>=
lockingOutputStream)
stderr :: OutputStream ByteString
stderr = unsafePerformIO (handleToOutputStream IO.stderr >>=
lockingOutputStream)