module IO (hGetContents) where import NHC.Internal (IO(..)) import DHandle import HGetChar(cHGetChar) import PreludeBuiltin (_hGetStr) {- nhc currently doesn't implement semi-closed handles. Hence using hGetContents twice for the same handle will lead to obscure results. -} hGetContents :: Handle -> IO String hGetContents h = IO (\world -> Right (cHGetStr h)) {- where input h = let c = cHGetChar h in if c < 0 then [] -- EOF here else toEnum c : input h -} cHGetStr :: Handle -> [Char] cHGetStr h = _hGetStr h -- _hGetStr becomes a special bytecode