The io-streams package

[Tags: bsd3, library]


The io-streams library contains simple and easy-to-use primitives for I/O using streams. Most users will want to import the top-level convenience module System.IO.Streams, which re-exports most of the library:

import           System.IO.Streams (InputStream, OutputStream)
import qualified System.IO.Streams as Streams

For first-time users, io-streams comes with an included tutorial, which can be found in the System.IO.Streams.Tutorial module.


The io-streams user API has two basic types: InputStream a and OutputStream a, and three fundamental I/O primitives:

-- read an item from an input stream :: InputStream a -> IO (Maybe a)

-- push an item back to an input stream
Streams.unRead :: a -> InputStream a -> IO ()

-- write to an output stream
Streams.write :: Maybe a -> OutputStream a -> IO ()

Streams can be transformed by composition and hooked together with provided combinators:

ghci> Streams.fromList [1,2,3::Int] >>= (*10) >>= Streams.toList

Stream composition leaves the original stream accessible:

ghci> input <- Streams.fromByteString "long string"
ghci> wrapped <- Streams.takeBytes 4 input
ghci> wrapped
Just "long"
ghci> wrapped
ghci> input
Just " string"

Simple types and operations in the IO monad mean straightforward and simple exception handling and resource cleanup using Haskell standard library facilities like Control.Exception.bracket.

io-streams comes with:

[Skip to ReadMe]


Dependenciesattoparsec (>=0.10 && <0.14), base (==4.*), bytestring (>=0.9 && <0.11), bytestring-builder (==0.10.*), network (>=2.3 && <2.7), primitive (>=0.2 && <0.7), process (>=1.1 && <1.3), text (>=0.10 && <1.3), time (>=1.2 && <1.6), transformers (>=0.2 && <0.5), vector (>=0.7 && <0.12), zlib-bindings (==0.1.*) [details]
MaintainerGregory Collins <>
CategoryData, Network, IO-Streams
Bug tracker
Source repositoryhead: git clone
UploadedTue Aug 4 21:26:00 UTC 2015 by GregoryCollins
DistributionsDebian:, Fedora:, LTSHaskell:, NixOS:, Stackage:
Downloads17115 total (433 in last 30 days)
2 []
StatusDocs available [build log]
Last success reported on 2015-08-04 [all 1 reports]




nointeractivetestsDo not run interactive testsDisabledAutomatic

Use -f <flag> to enable a flag, or -f -<flag> to disable that flag. More info


Maintainers' corner

For package maintainers and hackage trustees

Readme for io-streams-

The io-streams library contains simple and easy to use primitives for I/O using streams. Based on simple types with one type parameter (InputStream a and OutputStream a), io-streams provides a basic interface to side-effecting input and output in IO monad with the following features: