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.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:
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.
ChangeLog
1.1.4.3
- Allow use of new network version 2.5.
1.1.4.2
- Fixed a build error with network versions older than 2.4.
1.1.4.1
System.IO.Streams.Network
: scalability improvement: buffers for socket reads are now allocated by system malloc rather than by pinned pointers in GHC (currently pinned pointer allocation takes a global lock).1.1.4.0
- Widened
attoparsec
andtext
library dependencies to allow the latest versions. 1.1.3.0
- Added
System.IO.Streams.ByteString.takeExactly
. Widenednetwork
dependency to include 2.3. Added aNoInteractiveTests
flag to selectively disable some tests for environments where spawning interactive processes is impossible. 1.1.2.2
- Allowed newest versions of the
process
,test-framework
, andtext
libraries. 1.1.2.1
- Fixed build error when compiled against attoparsec-0.10.0.x.
1.1.2.0
- Added
System.IO.Streams.Concurrent.makeChanPipe
, to create a simple concurrent pipe between anInputStream
/OutputStream
pair. 1.1.1.0
- Added
System.IO.Streams.Network.socketToStreamsWithBufferSize
, allowing control over the size of the receive buffers used when reading from sockets. 1.1.0.3
- Fixed an inconsistent version upper bound in the test suite.
1.1.0.2
- Fixed a typo in the tutorial.
1.1.0.1
- A couple of Haddock markup fixes.
1.1.0.0
- 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.
1.0.2.2
- Fixed a bug in which "takeBytes 0" was erroneously requesting input from the wrapped stream.
1.0.2.1
- Fixed a compile error on GHC 7.0.x.
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 toSystem.IO.Handle
s. (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]
Modules
[Index]
- 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
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.1.4.3.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 |
---|---|
Dependencies | attoparsec (>=0.10 && <0.12), base (>=4 && <5), blaze-builder (>=0.3.1 && <0.4), bytestring (>=0.9 && <0.11), network (>=2.3 && <2.6), primitive (>=0.2 && <0.6), process (>=1.1 && <1.3), text (>=0.10 && <1.2), time (>=1.2 && <1.5), transformers (>=0.2 && <0.4), vector (>=0.7 && <0.11), zlib-bindings (>=0.1 && <0.2) [details] |
Tested with | ghc ==7.6.2, ghc ==7.6.1, ghc ==7.4.2, ghc ==7.4.1, ghc ==7.2.2, ghc ==7.0.4 |
License | BSD-3-Clause |
Author | |
Maintainer | Gregory Collins <[email protected]> |
Revised | Revision 2 made by HerbertValerioRiedel at 2015-01-09T13:45:19Z |
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 |
Uploaded | by GregoryCollins at 2014-04-16T11:20:56Z |
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, 3648 indirect [details] |
Downloads | 86876 total (200 in the last 30 days) |
Rating | 2.5 (votes: 5) [estimated by Bayesian average] |
Your Rating | |
Status | Docs available [build log] Successful builds reported [all 1 reports] |