@hackage simple-pipe0.0.0.29
simple pipeline library like conduit
Installation
Dependencies (7)
- base >=4.6 && <5
- bytestring >=0.10 && <0.11
- lifted-base >=0.2 && <0.3
- monad-control >=1.0 && <1.1
- monads-tf >=0.1 && <0.2
- stm >=2.4 && <2.5 Show all…
Dependents (6)
@hackage/xmpipe, @hackage/acme-everything, @hackage/xml-push, @hackage/xml-pipe, @hackage/sasl, @hackage/tighttp
examples/upperFile.hs
read file (sample.txt)
take 3 lines
to upper all lines
write to stdout
extensions
PackageImports
import Data.Pipe import Data.Char import System.IO import "monads-tf" Control.Monad.Trans main :: IO () main = do _ <- runPipe $ readFileP "sample.txt" =$= takeP 3 =$= convert (map toUpper) =$= writeString return () readFileP :: FilePath -> Pipe () String IO () readFileP fp = bracket (openFile fp ReadMode) hClose hRead hRead :: Handle -> Pipe () String IO () hRead h = do eof <- lift $ hIsEOF h if eof then return () else do l <- lift $ hGetLine h yield l hRead h writeString :: Pipe String () IO () writeString = do ms <- await case ms of Just s -> lift (putStrLn s) >> writeString _ -> return () takeP :: Monad m => Int -> Pipe a a m () takeP 0 = return () takeP n = do mx <- await case mx of Just x -> yield x >> takeP (n - 1) _ -> return ()