on master help sign in
Static argument transformation of hGetLineLoop
839b12eBryan O'Sullivan
Data/Text/IO/Internal.hs+3−2
@@ -44,7 +44,8 @@ hGetLineWith f h = wantReadableHandle_ "hGetLine" h go
44 go hh@Handle__{..} = readIORef haCharBuffer >>= fmap f . hGetLineLoop hh []
44 go hh@Handle__{..} = readIORef haCharBuffer >>= fmap f . hGetLineLoop hh []
45
45
46hGetLineLoop :: Handle__ -> [Text] -> CharBuffer -> IO [Text]
46hGetLineLoop :: Handle__ -> [Text] -> CharBuffer -> IO [Text]
47+hGetLineLoop hh@Handle__{..} = go where
47−hGetLineLoop hh@Handle__{..} ts buf@Buffer{ bufL=r0, bufR=w, bufRaw=raw0 } = do
48+ go ts buf@Buffer{ bufL=r0, bufR=w, bufRaw=raw0 } = do
48 let findEOL raw r | r == w = return (False, w)
49 let findEOL raw r | r == w = return (False, w)
49 | otherwise = do
50 | otherwise = do
50 (c,r') <- readCharBuf raw r
51 (c,r') <- readCharBuf raw r
@@ -76,7 +77,7 @@ hGetLineLoop hh@Handle__{..} ts buf@Buffer{ bufL=r0, bufR=w, bufRaw=raw0 } = do
76 if null str
77 if null str
77 then ioe_EOF
78 then ioe_EOF
78 else return str
79 else return str
79− Just new_buf -> hGetLineLoop hh (t:ts) new_buf
80+ Just new_buf -> go (t:ts) new_buf
80
81
81-- This function is lifted almost verbatim from GHC.IO.Handle.Text.
82-- This function is lifted almost verbatim from GHC.IO.Handle.Text.
82maybeFillReadBuffer :: Handle__ -> CharBuffer -> IO (Maybe CharBuffer)
83maybeFillReadBuffer :: Handle__ -> CharBuffer -> IO (Maybe CharBuffer)