1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
|
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE pkgmetadata SYSTEM "http://www.gentoo.org/dtd/metadata.dtd">
<pkgmetadata>
<maintainer type="project">
<email>haskell@gentoo.org</email>
<name>Gentoo Haskell</name>
</maintainer>
<longdescription>
/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.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@ and @text@ library dependencies to allow
the latest versions.
[@1.1.3.0@] 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.
[@1.1.2.2@] Allowed newest versions of the @process@, @test-framework@,
and @text@ 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 an @InputStream@/@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 to
'System.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.
</longdescription>
</pkgmetadata>
|