X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=Pipes%2FText%2FIO.hs;h=51c69265a04ac49a9aaa047cf7b1952242efdc40;hb=bdc47ebc7bd24c7b123867072c825d42d26ca536;hp=bacb2073ed70def68e6a67ff9a25ffb4e7967693;hpb=3b27b572ed0bd65e0e5a2d8d1debf78a17048c52;p=github%2Ffretlink%2Ftext-pipes.git diff --git a/Pipes/Text/IO.hs b/Pipes/Text/IO.hs index bacb207..51c6926 100644 --- a/Pipes/Text/IO.hs +++ b/Pipes/Text/IO.hs @@ -11,8 +11,10 @@ module Pipes.Text.IO -- * Producers fromHandle + , fromHandleLn , stdin , readFile + , readFileLn -- * Consumers , toHandle , stdout @@ -119,6 +121,19 @@ fromHandle h = go where go {-# INLINABLE fromHandle#-} + +fromHandleLn :: MonadIO m => IO.Handle -> Producer Text m () +fromHandleLn h = go where + getLine :: IO (Either G.IOException Text) + getLine = try (T.hGetLine h) + + go = do txt <- liftIO getLine + case txt of + Left e -> return () + Right y -> do yield y + go +{-# INLINABLE fromHandleLn #-} + -- | Stream text from 'stdin' stdin :: MonadIO m => Producer Text m () stdin = fromHandle IO.stdin @@ -138,20 +153,9 @@ readFile file = Safe.withFile file IO.ReadMode fromHandle {-| Stream lines of text from a file -} -readFileLines :: MonadSafe m => FilePath -> Producer Text m () -readFileLines file = Safe.withFile file IO.ReadMode fromHandleLines - where - fromHandleLines :: MonadIO m => IO.Handle -> Producer Text m () - fromHandleLines h = go where - getLine :: IO (Either G.IOException Text) - getLine = try (T.hGetLine h) - - go = do txt <- liftIO getLine - case txt of - Left e -> return () - Right y -> do yield y - go -{-# INLINE readFileLines #-} +readFileLn :: MonadSafe m => FilePath -> Producer Text m () +readFileLn file = Safe.withFile file IO.ReadMode fromHandleLn +{-# INLINE readFileLn #-} {-| Stream text to 'stdout'