The io-streams package

[Tags:bsd3, library]

Overview

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.

Features

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
Streams.System.IO.Streams.read :: 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] >>= Streams.map (*10) >>= Streams.toList
[10,20,30]

Stream composition leaves the original stream accessible:

ghci> input <- Streams.fromByteString "long string"
ghci> wrapped <- Streams.takeBytes 4 input
ghci> Streams.read wrapped
Just "long"
ghci> Streams.read wrapped
Nothing
ghci> Streams.read 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:

ChangeLog

1.0.2.0
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.)
1.0.1.0
Added System.IO.Streams.Combinators.ignoreEof.
1.0.0.1
Fixed some haddock markup.

[Skip to Readme]

Properties

Versions 1.0.0.0, 1.0.0.1, 1.0.1.0, 1.0.2.0, 1.0.2.1, 1.0.2.2, 1.1.0.0, 1.1.0.1, 1.1.0.2, 1.1.0.3, 1.1.1.0, 1.1.2.0, 1.1.2.1, 1.1.2.2, 1.1.3.0, 1.1.4.0, 1.1.4.1, 1.1.4.2, 1.1.4.3, 1.1.4.4, 1.1.4.5, 1.1.4.6, 1.2.0.0, 1.2.0.1, 1.2.1.1, 1.2.1.2, 1.2.1.3, 1.3.0.0, 1.3.1.0, 1.3.2.0, 1.3.3.0, 1.3.3.1, 1.3.4.0, 1.3.5.0
Dependencies attoparsec (==0.10.*), base (>=4.4 && <5), blaze-builder (>=0.3.1 && <0.4), bytestring (>=0.9 && <0.11), network (==2.4.*), primitive (>=0.2 && <0.6), process (>=1 && <1.2), text (>=0.10 && <0.12), time (>=1.2 && <1.5), transformers (>=0.2 && <0.4), vector (>=0.7 && <0.11), zlib-bindings (==0.1.*) [details]
License BSD3
Author
Maintainer Gregory Collins <greg@gregorycollins.net>
Stability Unknown
Category Data, Network, IO-Streams
Source repository head: git clone git://github.com/snapframework/io-streams.git
Uploaded Thu Apr 18 21:46:05 UTC 2013 by GregoryCollins
Updated Fri Jan 9 13:34:28 UTC 2015 by HerbertValerioRiedel to revision 1
Distributions Debian:1.3.4.0, Fedora:1.3.2.0, LTSHaskell:1.3.5.0, NixOS:1.3.5.0, Stackage:1.3.5.0
Downloads 18418 total (73 in the last 30 days)
Votes
2 []
Status Docs uploaded by user
Build status unknown [no reports yet]

Modules

[Index]

Downloads

Maintainer's Corner

For package maintainers and hackage trustees

Readme for io-streams

Readme for io-streams-1.0.2.0

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:

  • three fundamental I/O primitives that anyone can understand: read :: InputStream a -> IO (Maybe a), unRead :: a -> InputStream a -> IO (), and write :: Maybe a -> OutputStream a -> IO ().

  • simple types and side-effecting IO operations mean straightforward and simple exception handling and resource cleanup using standard Haskell facilities like bracket.

  • code to transform files, handles, and sockets to streams

  • a variety of combinators for wrapping and transforming streams, including compression and decompression using zlib, controlling precisely how many bytes are read to or written from a socket, buffering output using blaze-builder, etc.

  • support for parsing from streams using attoparsec.