| CARVIEW |
io-streams: Simple, composable, and easy-to-use stream I/O
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.read :: 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] >>= 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:
functions to use files, handles, concurrent channels, sockets, lists, vectors, and more as streams.
a variety of combinators for wrapping and transforming streams, including compression and decompression using zlib, controlling precisely how many bytes are read from or written to a stream, buffering output using bytestring builders, folds, maps, filters, zips, etc.
support for parsing from streams using
attoparsec.support for spawning processes and communicating with them using streams.
[Skip to Readme]
Modules
[Index] [Quick Jump]
- System
- IO
- System.IO.Streams
- System.IO.Streams.Attoparsec
- System.IO.Streams.Builder
- System.IO.Streams.ByteString
- System.IO.Streams.Combinators
- System.IO.Streams.Concurrent
- System.IO.Streams.Core
- System.IO.Streams.Debug
- System.IO.Streams.File
- System.IO.Streams.Handle
- System.IO.Streams.Internal
- System.IO.Streams.List
- System.IO.Streams.Network
- System.IO.Streams.Process
- System.IO.Streams.Text
- System.IO.Streams.Tutorial
- System.IO.Streams.Vector
- System.IO.Streams.Zlib
- System.IO.Streams
- IO
Flags
Manual Flags
| Name | Description | Default |
|---|---|---|
| zlib | Include zlib support | Enabled |
| network | Include network support | Enabled |
Automatic Flags
| Name | Description | Default |
|---|---|---|
| nointeractivetests | Do not run interactive tests | Disabled |
Use -f <flag> to enable a flag, or -f -<flag> to disable that flag. More info
Downloads
- io-streams-1.5.2.2.tar.gz [browse] (Cabal source package)
- Package description (revised from the package)
Note: This package has metadata revisions in the cabal description newer than included in the tarball. To unpack the package including the revisions, use 'cabal get'.
Maintainer's Corner
For package maintainers and hackage trustees
Candidates
| Versions [RSS] | 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, 1.3.6.0, 1.3.6.1, 1.4.0.0, 1.4.1.0, 1.5.0.0, 1.5.0.1, 1.5.1.0, 1.5.2.0, 1.5.2.1, 1.5.2.2 |
|---|---|
| Change log | changelog.md |
| Dependencies | attoparsec (>=0.10 && <0.15), base (>=4 && <5), bytestring (>=0.9 && <0.13), bytestring-builder (>=0.10 && <0.11), network (>=2.3 && <4), primitive (>=0.2 && <0.10), process (>=1.1 && <1.7), text (>=0.10 && <1.3 || >=2.0 && <2.2), time (>=1.2 && <1.16), transformers (>=0.2 && <0.7), vector (>=0.7 && <0.14), zlib-bindings (>=0.1 && <0.2) [details] |
| Tested with | ghc ==9.14.1, ghc ==9.12.2, ghc ==9.10.3, ghc ==9.8.4, ghc ==9.6.7, ghc ==9.4.8, ghc ==9.2.8, ghc ==9.0.2, ghc ==8.10.7, ghc ==8.8.4, ghc ==8.6.5 |
| License | BSD-3-Clause |
| Author | |
| Maintainer | Gregory Collins <greg@gregorycollins.net> |
| Uploaded | by DougBeardsley at 2022-08-17T18:04:17Z |
| Revised | Revision 7 made by AndreasAbel at 2026-01-05T14:38:39Z |
| Category | Data, Network, IO-Streams |
| Bug tracker | https://github.com/snapframework/io-streams/issues |
| Source repo | head: git clone https://github.com/snapframework/io-streams.git |
| Distributions | Arch:1.5.2.2, Debian:1.5.1.0, Fedora:1.5.2.2, LTSHaskell:1.5.2.2, NixOS:1.5.2.2, Stackage:1.5.2.2 |
| Reverse Dependencies | 101 direct, 3769 indirect [details] |
| Downloads | 88343 total (158 in the last 30 days) |
| Rating | 2.5 (votes: 5) [estimated by Bayesian average] |
| Your Rating |
|
| Status | Docs available [build log] Last success reported on 2022-08-17 [all 1 reports] |
Readme for io-streams-1.5.2.2
[back to package description]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 (), andwrite :: 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.