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 :: System.IO.Streams.InputStream a -> IO (Maybe a)

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

-- write to an output stream
Streams.System.IO.Streams.write :: Maybe a -> System.IO.Streams.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:

Added System.IO.Streams.ByteString.takeExactly. Widened network dependency to include 2.3. Added a NoInteractiveTests flag to selectively disable some tests for environments where spawning interactive processes is impossible.
Allowed newest versions of the process, test-framework, and text libraries.
Fixed build error when compiled against attoparsec-0.10.0.x.
Added System.IO.Streams.Concurrent.makeChanPipe, to create a simple concurrent pipe between an InputStream/OutputStream pair.
Added System.IO.Streams.Network.socketToStreamsWithBufferSize, allowing control over the size of the receive buffers used when reading from sockets.
Fixed an inconsistent version upper bound in the test suite.
Fixed a typo in the tutorial.
A couple of Haddock markup fixes.
Reworked, simplified, and streamlined the internals of the library. Exports from System.IO.Streams.Internal relying on Sources and Sinks were deleted because they are no longer necessary: Source(..), Sink(..), defaultPushback, withDefaultPushback, nullSource, nullSink, singletonSource, simpleSource, sourceToStream, sinkToStream, generatorToSource, and consumerToSink.
Fixed a bug in which "takeBytes 0" was erroneously requesting input from the wrapped stream.
Fixed a compile error on GHC 7.0.x.
Added System.IO.Streams.Process (support for communicating with system processes using streams), added new functions to System.IO.Streams.Handle for converting io-streams types to System.IO.Handles. (Now you can pass streams from this library to places that expect Handles and everything will work.)
Added System.IO.Streams.Combinators.ignoreEof.
Fixed some haddock markup.


Change logNone available
Dependenciesattoparsec (==0.10.*), base (==4.*), blaze-builder (>=0.3.1 && <0.4), bytestring (>=0.9 && <0.11), network (>=2.3 && <2.5), primitive (>=0.2 && <0.6), process (>=1 && <1.3), text (>=0.10 && <1.1), time (>=1.2 && <1.5), transformers (>=0.2 && <0.4), vector (>=0.7 && <0.11), zlib-bindings (==0.1.*)
MaintainerGregory Collins <>
CategoryData, Network, IO-Streams
Bug tracker
Source repositoryhead: git clone
UploadedWed Jan 8 13:21:22 UTC 2014 by GregoryCollins
DistributionsDebian:, Fedora:, NixOS:
Downloads14956 total (506 in last 30 days)
StatusDocs available [build log]
Successful builds reported [all 1 reports]




nointeractivetestsDo not run interactive testsDisabled

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


Maintainers' corner

For package maintainers and hackage trustees