Navigation Menu

Skip to content

Commit

Permalink
Hoist out duplicated catchError definitions :-(
Browse files Browse the repository at this point in the history
  • Loading branch information
bos committed Sep 9, 2012
1 parent 43afcf2 commit be28fb7
Showing 1 changed file with 12 additions and 17 deletions.
29 changes: 12 additions & 17 deletions Data/Text/IO.hs
Expand Up @@ -98,20 +98,22 @@ writeFile p = withFile p WriteMode . flip hPutStr
appendFile :: FilePath -> Text -> IO ()
appendFile p = withFile p AppendMode . flip hPutStr

catchError :: String -> Handle -> Handle__ -> IOError -> IO Text
catchError caller h Handle__{..} err
| isEOFError err = do
buf <- readIORef haCharBuffer
return $ if isEmptyBuffer buf
then T.empty
else T.singleton '\r'
| otherwise = E.throwIO (augmentIOError err caller h)

-- | Read a single chunk of strict text from a 'Handle'.
hGetChunk :: Handle -> IO Text
hGetChunk h = wantReadableHandle "hGetChunk" h readSingleChunk
where
readSingleChunk hh@Handle__{..} = do
let catchError e
| isEOFError e = do
buf <- readIORef haCharBuffer
return $ if isEmptyBuffer buf
then T.empty
else T.singleton '\r'
| otherwise = throwIO (augmentIOError e "hGetChunk" h)
buf <- readIORef haCharBuffer
t <- readChunk hh buf `catch` catchError
t <- readChunk hh buf `E.catch` catchError "hGetChunk" h hh
return (hh, t)

-- | Read the remaining contents of a 'Handle' as a string. The
Expand All @@ -134,16 +136,9 @@ hGetContents h = do
wantReadableHandle "hGetContents" h readAll
where
readAll hh@Handle__{..} = do
let catchError e
| isEOFError e = do
buf <- readIORef haCharBuffer
return $ if isEmptyBuffer buf
then T.empty
else T.singleton '\r'
| otherwise = E.throwIO (augmentIOError e "hGetContents" h)
readChunks = do
let readChunks = do
buf <- readIORef haCharBuffer
t <- readChunk hh buf `E.catch` catchError
t <- readChunk hh buf `E.catch` catchError "hGetContents" h hh
if T.null t
then return [t]
else (t:) `fmap` readChunks
Expand Down

0 comments on commit be28fb7

Please sign in to comment.