io-streams: Simple, composable, and easy-to-use stream I/O

This is a package candidate release! Here you can preview how this package release will appear once published to the main package index (which can be accomplished via the 'maintain' link below). Please note that once a package has been published to the main package index it cannot be undone! Please consult the package uploading documentation for more information.

[maintain] [Publish]

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:


[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, 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, 1.5.2.2
Change log changelog.md
Dependencies attoparsec (>=0.10 && <0.15), base (>=4 && <5), bytestring (>=0.9 && <0.12), bytestring-builder (>=0.10 && <0.11), network (>=2.3 && <3.2), primitive (>=0.2 && <0.8), process (>=1.1 && <1.7), text (>=0.10 && <1.3 || >=2.0 && <2.1), time (>=1.2 && <1.13), transformers (>=0.2 && <0.7), vector (>=0.7 && <0.14), zlib-bindings (>=0.1 && <0.2) [details]
License BSD-3-Clause
Author
Maintainer Gregory Collins <greg@gregorycollins.net>
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 DougBeardsley at 2022-08-17T18:04:07Z

Modules

[Index] [Quick Jump]

Flags

Manual Flags

NameDescriptionDefault
zlib

Include zlib support

Enabled
network

Include network support

Enabled
Automatic Flags
NameDescriptionDefault
nointeractivetests

Do not run interactive tests

Disabled

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

Downloads

Maintainer's Corner

Package maintainers

For package maintainers and hackage trustees


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: