summaryrefslogtreecommitdiff
blob: 7852149c9343a169684c21f7b143341eefed1059 (plain)
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 -&gt; IO (Maybe a)
		
		\-\- push an item back to an input stream
		Streams.'System.IO.Streams.unRead' :: a -&gt; 'System.IO.Streams.InputStream' a -&gt; IO ()
		
		\-\- write to an output stream
		Streams.'System.IO.Streams.write' :: Maybe a -&gt; 'System.IO.Streams.OutputStream' a -&gt; IO ()
		@
		
		Streams can be transformed by composition and hooked together with provided combinators:
		
		@
		ghci&gt; Streams.fromList [1,2,3::Int] &gt;&gt;= Streams.map (*10) &gt;&gt;= Streams.toList
		[10,20,30]
		@
		
		Stream composition leaves the original stream accessible:
		
		@
		ghci&gt; input \&lt;- Streams.fromByteString \"long string\"
		ghci&gt; wrapped \&lt;- Streams.takeBytes 4 input
		ghci&gt; Streams.read wrapped
		Just \"long\"
		ghci&gt; Streams.read wrapped
		Nothing
		ghci&gt; 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>