Sophie

Sophie

distrib > Fedora > 16 > i386 > by-pkgid > 2cd141a726d0b21c6d777d4f019dd33c > files > 11

ghc-Stream-devel-0.4.6-1.fc16.i686.rpm

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Data.Stream</title><link href="ocean.css" rel="stylesheet" type="text/css" title="Ocean" /><script src="haddock-util.js" type="text/javascript"></script><script type="text/javascript">//<![CDATA[
window.onload = function () {pageLoad();setSynopsis("mini_Data-Stream.html");};
//]]>
</script></head><body><div id="package-header"><ul class="links" id="page-menu"><li><a href="src/Data-Stream.html">Source</a></li><li><a href="index.html">Contents</a></li><li><a href="doc-index.html">Index</a></li></ul><p class="caption">Stream-0.4.6: A library for manipulating infinite lists.</p></div><div id="content"><div id="module-header"><p class="caption">Data.Stream</p></div><div id="table-of-contents"><p class="caption">Contents</p><ul><li><a href="#g:1">The type of streams
</a></li><li><a href="#g:2">Basic functions
</a></li><li><a href="#g:3">Stream transformations
</a></li><li><a href="#g:4">Building streams
</a></li><li><a href="#g:5">Extracting sublists
</a></li><li><a href="#g:6">Sublist predicates
</a></li><li><a href="#g:7">Indexing streams
</a></li><li><a href="#g:8">Zipping and unzipping streams
</a></li><li><a href="#g:9">Functions on streams of characters
</a></li><li><a href="#g:10">Converting to and from an infinite list
</a></li></ul></div><div id="description"><p class="caption">Description</p><div class="doc"><p>Streams are infinite lists. Most operations on streams are
 completely analogous to the definition in Data.List.
</p></div></div><div id="synopsis"><p id="control.syn" class="caption expander" onclick="toggleSection('syn')">Synopsis</p><ul id="section.syn" class="hide" onclick="toggleSection('syn')"><li class="src short"><span class="keyword">data</span>  <a href="#t:Stream">Stream</a> a = <a href="#v:Cons">Cons</a> a (<a href="Data-Stream.html#t:Stream">Stream</a> a)</li><li class="src short"><a href="#v:-60-:-62-">(&lt;:&gt;)</a> ::  a -&gt; <a href="Data-Stream.html#t:Stream">Stream</a> a -&gt; <a href="Data-Stream.html#t:Stream">Stream</a> a</li><li class="src short"><a href="#v:head">head</a> ::  <a href="Data-Stream.html#t:Stream">Stream</a> a -&gt; a</li><li class="src short"><a href="#v:tail">tail</a> ::  <a href="Data-Stream.html#t:Stream">Stream</a> a -&gt; <a href="Data-Stream.html#t:Stream">Stream</a> a</li><li class="src short"><a href="#v:inits">inits</a> ::  <a href="Data-Stream.html#t:Stream">Stream</a> a -&gt; <a href="Data-Stream.html#t:Stream">Stream</a> [a]</li><li class="src short"><a href="#v:tails">tails</a> ::  <a href="Data-Stream.html#t:Stream">Stream</a> a -&gt; <a href="Data-Stream.html#t:Stream">Stream</a> (<a href="Data-Stream.html#t:Stream">Stream</a> a)</li><li class="src short"><a href="#v:map">map</a> ::  (a -&gt; b) -&gt; <a href="Data-Stream.html#t:Stream">Stream</a> a -&gt; <a href="Data-Stream.html#t:Stream">Stream</a> b</li><li class="src short"><a href="#v:intersperse">intersperse</a> ::  a -&gt; <a href="Data-Stream.html#t:Stream">Stream</a> a -&gt; <a href="Data-Stream.html#t:Stream">Stream</a> a</li><li class="src short"><a href="#v:interleave">interleave</a> ::  <a href="Data-Stream.html#t:Stream">Stream</a> a -&gt; <a href="Data-Stream.html#t:Stream">Stream</a> a -&gt; <a href="Data-Stream.html#t:Stream">Stream</a> a</li><li class="src short"><a href="#v:scan">scan</a> ::  (a -&gt; b -&gt; a) -&gt; a -&gt; <a href="Data-Stream.html#t:Stream">Stream</a> b -&gt; <a href="Data-Stream.html#t:Stream">Stream</a> a</li><li class="src short"><a href="#v:scan-39-">scan'</a> ::  (a -&gt; b -&gt; a) -&gt; a -&gt; <a href="Data-Stream.html#t:Stream">Stream</a> b -&gt; <a href="Data-Stream.html#t:Stream">Stream</a> a</li><li class="src short"><a href="#v:scan1">scan1</a> ::  (a -&gt; a -&gt; a) -&gt; <a href="Data-Stream.html#t:Stream">Stream</a> a -&gt; <a href="Data-Stream.html#t:Stream">Stream</a> a</li><li class="src short"><a href="#v:scan1-39-">scan1'</a> ::  (a -&gt; a -&gt; a) -&gt; <a href="Data-Stream.html#t:Stream">Stream</a> a -&gt; <a href="Data-Stream.html#t:Stream">Stream</a> a</li><li class="src short"><a href="#v:transpose">transpose</a> ::  <a href="Data-Stream.html#t:Stream">Stream</a> (<a href="Data-Stream.html#t:Stream">Stream</a> a) -&gt; <a href="Data-Stream.html#t:Stream">Stream</a> (<a href="Data-Stream.html#t:Stream">Stream</a> a)</li><li class="src short"><a href="#v:iterate">iterate</a> ::  (a -&gt; a) -&gt; a -&gt; <a href="Data-Stream.html#t:Stream">Stream</a> a</li><li class="src short"><a href="#v:repeat">repeat</a> ::  a -&gt; <a href="Data-Stream.html#t:Stream">Stream</a> a</li><li class="src short"><a href="#v:cycle">cycle</a> ::  [a] -&gt; <a href="Data-Stream.html#t:Stream">Stream</a> a</li><li class="src short"><a href="#v:unfold">unfold</a> ::  (c -&gt; (a, c)) -&gt; c -&gt; <a href="Data-Stream.html#t:Stream">Stream</a> a</li><li class="src short"><a href="#v:take">take</a> ::  <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Data-Int.html#t:Int">Int</a> -&gt; <a href="Data-Stream.html#t:Stream">Stream</a> a -&gt; [a]</li><li class="src short"><a href="#v:drop">drop</a> ::  <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Data-Int.html#t:Int">Int</a> -&gt; <a href="Data-Stream.html#t:Stream">Stream</a> a -&gt; <a href="Data-Stream.html#t:Stream">Stream</a> a</li><li class="src short"><a href="#v:splitAt">splitAt</a> ::  <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Data-Int.html#t:Int">Int</a> -&gt; <a href="Data-Stream.html#t:Stream">Stream</a> a -&gt; ([a], <a href="Data-Stream.html#t:Stream">Stream</a> a)</li><li class="src short"><a href="#v:takeWhile">takeWhile</a> ::  (a -&gt; <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Data-Bool.html#t:Bool">Bool</a>) -&gt; <a href="Data-Stream.html#t:Stream">Stream</a> a -&gt; [a]</li><li class="src short"><a href="#v:dropWhile">dropWhile</a> ::  (a -&gt; <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Data-Bool.html#t:Bool">Bool</a>) -&gt; <a href="Data-Stream.html#t:Stream">Stream</a> a -&gt; <a href="Data-Stream.html#t:Stream">Stream</a> a</li><li class="src short"><a href="#v:span">span</a> ::  (a -&gt; <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Data-Bool.html#t:Bool">Bool</a>) -&gt; <a href="Data-Stream.html#t:Stream">Stream</a> a -&gt; ([a], <a href="Data-Stream.html#t:Stream">Stream</a> a)</li><li class="src short"><a href="#v:break">break</a> ::  (a -&gt; <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Data-Bool.html#t:Bool">Bool</a>) -&gt; <a href="Data-Stream.html#t:Stream">Stream</a> a -&gt; ([a], <a href="Data-Stream.html#t:Stream">Stream</a> a)</li><li class="src short"><a href="#v:filter">filter</a> ::  (a -&gt; <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Data-Bool.html#t:Bool">Bool</a>) -&gt; <a href="Data-Stream.html#t:Stream">Stream</a> a -&gt; <a href="Data-Stream.html#t:Stream">Stream</a> a</li><li class="src short"><a href="#v:partition">partition</a> ::  (a -&gt; <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Data-Bool.html#t:Bool">Bool</a>) -&gt; <a href="Data-Stream.html#t:Stream">Stream</a> a -&gt; (<a href="Data-Stream.html#t:Stream">Stream</a> a, <a href="Data-Stream.html#t:Stream">Stream</a> a)</li><li class="src short"><a href="#v:group">group</a> :: <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Data-Eq.html#t:Eq">Eq</a> a =&gt; <a href="Data-Stream.html#t:Stream">Stream</a> a -&gt; <a href="Data-Stream.html#t:Stream">Stream</a> [a]</li><li class="src short"><a href="#v:isPrefixOf">isPrefixOf</a> :: <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Data-Eq.html#t:Eq">Eq</a> a =&gt; [a] -&gt; <a href="Data-Stream.html#t:Stream">Stream</a> a -&gt; <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Data-Bool.html#t:Bool">Bool</a></li><li class="src short"><a href="#v:-33--33-">(!!)</a> ::  <a href="Data-Stream.html#t:Stream">Stream</a> a -&gt; <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Data-Int.html#t:Int">Int</a> -&gt; a</li><li class="src short"><a href="#v:elemIndex">elemIndex</a> :: <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Data-Eq.html#t:Eq">Eq</a> a =&gt; a -&gt; <a href="Data-Stream.html#t:Stream">Stream</a> a -&gt; <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Data-Int.html#t:Int">Int</a></li><li class="src short"><a href="#v:elemIndices">elemIndices</a> :: <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Data-Eq.html#t:Eq">Eq</a> a =&gt; a -&gt; <a href="Data-Stream.html#t:Stream">Stream</a> a -&gt; <a href="Data-Stream.html#t:Stream">Stream</a> <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Data-Int.html#t:Int">Int</a></li><li class="src short"><a href="#v:findIndex">findIndex</a> ::  (a -&gt; <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Data-Bool.html#t:Bool">Bool</a>) -&gt; <a href="Data-Stream.html#t:Stream">Stream</a> a -&gt; <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Data-Int.html#t:Int">Int</a></li><li class="src short"><a href="#v:findIndices">findIndices</a> ::  (a -&gt; <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Data-Bool.html#t:Bool">Bool</a>) -&gt; <a href="Data-Stream.html#t:Stream">Stream</a> a -&gt; <a href="Data-Stream.html#t:Stream">Stream</a> <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Data-Int.html#t:Int">Int</a></li><li class="src short"><a href="#v:zip">zip</a> ::  <a href="Data-Stream.html#t:Stream">Stream</a> a -&gt; <a href="Data-Stream.html#t:Stream">Stream</a> b -&gt; <a href="Data-Stream.html#t:Stream">Stream</a> (a, b)</li><li class="src short"><a href="#v:zipWith">zipWith</a> ::  (a -&gt; b -&gt; c) -&gt; <a href="Data-Stream.html#t:Stream">Stream</a> a -&gt; <a href="Data-Stream.html#t:Stream">Stream</a> b -&gt; <a href="Data-Stream.html#t:Stream">Stream</a> c</li><li class="src short"><a href="#v:unzip">unzip</a> ::  <a href="Data-Stream.html#t:Stream">Stream</a> (a, b) -&gt; (<a href="Data-Stream.html#t:Stream">Stream</a> a, <a href="Data-Stream.html#t:Stream">Stream</a> b)</li><li class="src short"><a href="#v:words">words</a> :: <a href="Data-Stream.html#t:Stream">Stream</a> <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Data-Char.html#t:Char">Char</a> -&gt; <a href="Data-Stream.html#t:Stream">Stream</a> <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Data-Char.html#t:String">String</a></li><li class="src short"><a href="#v:unwords">unwords</a> :: <a href="Data-Stream.html#t:Stream">Stream</a> <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Data-Char.html#t:String">String</a> -&gt; <a href="Data-Stream.html#t:Stream">Stream</a> <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Data-Char.html#t:Char">Char</a></li><li class="src short"><a href="#v:lines">lines</a> :: <a href="Data-Stream.html#t:Stream">Stream</a> <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Data-Char.html#t:Char">Char</a> -&gt; <a href="Data-Stream.html#t:Stream">Stream</a> <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Data-Char.html#t:String">String</a></li><li class="src short"><a href="#v:unlines">unlines</a> :: <a href="Data-Stream.html#t:Stream">Stream</a> <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Data-Char.html#t:String">String</a> -&gt; <a href="Data-Stream.html#t:Stream">Stream</a> <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Data-Char.html#t:Char">Char</a></li><li class="src short"><a href="#v:toList">toList</a> ::  <a href="Data-Stream.html#t:Stream">Stream</a> a -&gt; [a]</li><li class="src short"><a href="#v:fromList">fromList</a> ::  [a] -&gt; <a href="Data-Stream.html#t:Stream">Stream</a> a</li></ul></div><div id="interface"><h1 id="g:1">The type of streams
</h1><div class="top"><p class="src"><span class="keyword">data</span>  <a name="t:Stream" class="def">Stream</a> a <a href="src/Data-Stream.html#Stream" class="link">Source</a></p><div class="doc"><p>An infinite sequence.
</p><p><em>Beware</em>: If you use any function from the <code> Eq </code> or <code> Ord </code>
 class to compare two equal streams, these functions will diverge.
</p></div><div class="subs constructors"><p class="caption">Constructors</p><table><tr><td class="src"><a name="v:Cons" class="def">Cons</a> a (<a href="Data-Stream.html#t:Stream">Stream</a> a)</td><td class="doc empty">&nbsp;</td></tr></table></div><div class="subs instances"><p id="control.i:Stream" class="caption collapser" onclick="toggleSection('i:Stream')">Instances</p><div id="section.i:Stream" class="show"><table><tr><td class="src"><a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Control-Monad.html#t:Monad">Monad</a> <a href="Data-Stream.html#t:Stream">Stream</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Control-Monad.html#t:Functor">Functor</a> <a href="Data-Stream.html#t:Stream">Stream</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Control-Applicative.html#t:Applicative">Applicative</a> <a href="Data-Stream.html#t:Stream">Stream</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Data-Eq.html#t:Eq">Eq</a> a =&gt; <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Data-Eq.html#t:Eq">Eq</a> (<a href="Data-Stream.html#t:Stream">Stream</a> a)</td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Data-Ord.html#t:Ord">Ord</a> a =&gt; <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Data-Ord.html#t:Ord">Ord</a> (<a href="Data-Stream.html#t:Stream">Stream</a> a)</td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Text-Show.html#t:Show">Show</a> a =&gt; <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Text-Show.html#t:Show">Show</a> (<a href="Data-Stream.html#t:Stream">Stream</a> a)</td><td class="doc"><p>A Show instance for Streams that takes the right associativity into
 account and so doesn't put parenthesis around the tail of the Stream.
 Note that <code><a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Text-Show.html#v:show">show</a></code> returns an infinite <code><a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Data-Char.html#t:String">String</a></code>.
</p></td></tr><tr><td class="src"><a href="/usr/share/doc/ghc/html/libraries/QuickCheck-2.4.0.1/Test-QuickCheck-Arbitrary.html#t:Arbitrary">Arbitrary</a> a =&gt; <a href="/usr/share/doc/ghc/html/libraries/QuickCheck-2.4.0.1/Test-QuickCheck-Arbitrary.html#t:Arbitrary">Arbitrary</a> (<a href="Data-Stream.html#t:Stream">Stream</a> a)</td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="/usr/share/doc/ghc/html/libraries/QuickCheck-2.4.0.1/Test-QuickCheck-Arbitrary.html#t:CoArbitrary">CoArbitrary</a> a =&gt; <a href="/usr/share/doc/ghc/html/libraries/QuickCheck-2.4.0.1/Test-QuickCheck-Arbitrary.html#t:CoArbitrary">CoArbitrary</a> (<a href="Data-Stream.html#t:Stream">Stream</a> a)</td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="/usr/share/doc/ghc/html/libraries/lazysmallcheck-0.6/Test-LazySmallCheck.html#t:Serial">Serial</a> a =&gt; <a href="/usr/share/doc/ghc/html/libraries/lazysmallcheck-0.6/Test-LazySmallCheck.html#t:Serial">Serial</a> (<a href="Data-Stream.html#t:Stream">Stream</a> a)</td><td class="doc empty">&nbsp;</td></tr></table></div></div></div><h1 id="g:2">Basic functions
</h1><div class="top"><p class="src"><a name="v:-60-:-62-" class="def">(&lt;:&gt;)</a> ::  a -&gt; <a href="Data-Stream.html#t:Stream">Stream</a> a -&gt; <a href="Data-Stream.html#t:Stream">Stream</a> a<a href="src/Data-Stream.html#%3C%3A%3E" class="link">Source</a></p><div class="doc"><p>The <code> &lt;:&gt; </code> operator is an infix version of the <code><a href="Data-Stream.html#v:Cons">Cons</a></code>
 constructor.
</p></div></div><div class="top"><p class="src"><a name="v:head" class="def">head</a> ::  <a href="Data-Stream.html#t:Stream">Stream</a> a -&gt; a<a href="src/Data-Stream.html#head" class="link">Source</a></p><div class="doc"><p>Extract the first element of the sequence.
</p></div></div><div class="top"><p class="src"><a name="v:tail" class="def">tail</a> ::  <a href="Data-Stream.html#t:Stream">Stream</a> a -&gt; <a href="Data-Stream.html#t:Stream">Stream</a> a<a href="src/Data-Stream.html#tail" class="link">Source</a></p><div class="doc"><p>Extract the sequence following the head of the stream.
</p></div></div><div class="top"><p class="src"><a name="v:inits" class="def">inits</a> ::  <a href="Data-Stream.html#t:Stream">Stream</a> a -&gt; <a href="Data-Stream.html#t:Stream">Stream</a> [a]<a href="src/Data-Stream.html#inits" class="link">Source</a></p><div class="doc"><p>The <code><a href="Data-Stream.html#v:inits">inits</a></code> function takes a stream <code>xs</code> and returns all the
 finite prefixes of <code>xs</code>.
</p><p>Note that this <code><a href="Data-Stream.html#v:inits">inits</a></code> is lazier then <code>Data.List.inits</code>:
</p><pre> inits _|_ = [] ::: _|_
</pre><p>while for <code>Data.List.inits</code>:
</p><pre> inits _|_ = _|_
</pre></div></div><div class="top"><p class="src"><a name="v:tails" class="def">tails</a> ::  <a href="Data-Stream.html#t:Stream">Stream</a> a -&gt; <a href="Data-Stream.html#t:Stream">Stream</a> (<a href="Data-Stream.html#t:Stream">Stream</a> a)<a href="src/Data-Stream.html#tails" class="link">Source</a></p><div class="doc"><p>The <code><a href="Data-Stream.html#v:tails">tails</a></code> function takes a stream <code>xs</code> and returns all the
 suffixes of <code>xs</code>.
</p></div></div><h1 id="g:3">Stream transformations
</h1><div class="top"><p class="src"><a name="v:map" class="def">map</a> ::  (a -&gt; b) -&gt; <a href="Data-Stream.html#t:Stream">Stream</a> a -&gt; <a href="Data-Stream.html#t:Stream">Stream</a> b<a href="src/Data-Stream.html#map" class="link">Source</a></p><div class="doc"><p>Apply a function uniformly over all elements of a sequence.
</p></div></div><div class="top"><p class="src"><a name="v:intersperse" class="def">intersperse</a> ::  a -&gt; <a href="Data-Stream.html#t:Stream">Stream</a> a -&gt; <a href="Data-Stream.html#t:Stream">Stream</a> a<a href="src/Data-Stream.html#intersperse" class="link">Source</a></p><div class="doc"><p><code><a href="Data-Stream.html#v:intersperse">intersperse</a></code> <code>y</code> <code>xs</code> creates an alternating stream of
 elements from <code>xs</code> and <code>y</code>.
</p></div></div><div class="top"><p class="src"><a name="v:interleave" class="def">interleave</a> ::  <a href="Data-Stream.html#t:Stream">Stream</a> a -&gt; <a href="Data-Stream.html#t:Stream">Stream</a> a -&gt; <a href="Data-Stream.html#t:Stream">Stream</a> a<a href="src/Data-Stream.html#interleave" class="link">Source</a></p><div class="doc"><p>Interleave two Streams <code>xs</code> and <code>ys</code>, alternating elements
 from each list.
</p><pre> [x1,x2,...] `interleave` [y1,y2,...] == [x1,y1,x2,y2,...]
</pre></div></div><div class="top"><p class="src"><a name="v:scan" class="def">scan</a> ::  (a -&gt; b -&gt; a) -&gt; a -&gt; <a href="Data-Stream.html#t:Stream">Stream</a> b -&gt; <a href="Data-Stream.html#t:Stream">Stream</a> a<a href="src/Data-Stream.html#scan" class="link">Source</a></p><div class="doc"><p><code><a href="Data-Stream.html#v:scan">scan</a></code> yields a stream of successive reduced values from:
</p><pre> scan f z [x1, x2, ...] == [z, z `f` x1, (z `f` x1) `f` x2, ...]
</pre></div></div><div class="top"><p class="src"><a name="v:scan-39-" class="def">scan'</a> ::  (a -&gt; b -&gt; a) -&gt; a -&gt; <a href="Data-Stream.html#t:Stream">Stream</a> b -&gt; <a href="Data-Stream.html#t:Stream">Stream</a> a<a href="src/Data-Stream.html#scan%27" class="link">Source</a></p><div class="doc"><p><code>scan'</code> is a strict scan.
</p></div></div><div class="top"><p class="src"><a name="v:scan1" class="def">scan1</a> ::  (a -&gt; a -&gt; a) -&gt; <a href="Data-Stream.html#t:Stream">Stream</a> a -&gt; <a href="Data-Stream.html#t:Stream">Stream</a> a<a href="src/Data-Stream.html#scan1" class="link">Source</a></p><div class="doc"><p><code><a href="Data-Stream.html#v:scan1">scan1</a></code> is a variant of <code><a href="Data-Stream.html#v:scan">scan</a></code> that has no starting value argument:
</p><pre> scan1 f [x1, x2, ...] == [x1, x1 `f` x2, ...]
</pre></div></div><div class="top"><p class="src"><a name="v:scan1-39-" class="def">scan1'</a> ::  (a -&gt; a -&gt; a) -&gt; <a href="Data-Stream.html#t:Stream">Stream</a> a -&gt; <a href="Data-Stream.html#t:Stream">Stream</a> a<a href="src/Data-Stream.html#scan1%27" class="link">Source</a></p><div class="doc"><p><code>scan1'</code> is a strict scan that has no starting value.
</p></div></div><div class="top"><p class="src"><a name="v:transpose" class="def">transpose</a> ::  <a href="Data-Stream.html#t:Stream">Stream</a> (<a href="Data-Stream.html#t:Stream">Stream</a> a) -&gt; <a href="Data-Stream.html#t:Stream">Stream</a> (<a href="Data-Stream.html#t:Stream">Stream</a> a)<a href="src/Data-Stream.html#transpose" class="link">Source</a></p><div class="doc"><p><code><a href="Data-Stream.html#v:transpose">transpose</a></code> computes the transposition of a stream of streams.
</p></div></div><h1 id="g:4">Building streams
</h1><div class="top"><p class="src"><a name="v:iterate" class="def">iterate</a> ::  (a -&gt; a) -&gt; a -&gt; <a href="Data-Stream.html#t:Stream">Stream</a> a<a href="src/Data-Stream.html#iterate" class="link">Source</a></p><div class="doc"><p><code><a href="Data-Stream.html#v:iterate">iterate</a></code> <code>f</code> <code>x</code> function produces the infinite sequence
 of repeated applications of <code>f</code> to <code>x</code>.
</p><pre> iterate f x = [x, f x, f (f x), ..]
</pre></div></div><div class="top"><p class="src"><a name="v:repeat" class="def">repeat</a> ::  a -&gt; <a href="Data-Stream.html#t:Stream">Stream</a> a<a href="src/Data-Stream.html#repeat" class="link">Source</a></p><div class="doc"><p><code><a href="Data-Stream.html#v:repeat">repeat</a></code> <code>x</code> returns a constant stream, where all elements are
 equal to <code>x</code>.
</p></div></div><div class="top"><p class="src"><a name="v:cycle" class="def">cycle</a> ::  [a] -&gt; <a href="Data-Stream.html#t:Stream">Stream</a> a<a href="src/Data-Stream.html#cycle" class="link">Source</a></p><div class="doc"><p><code><a href="Data-Stream.html#v:cycle">cycle</a></code> <code>xs</code> returns the infinite repetition of <code>xs</code>:
</p><pre> cycle [1,2,3] = Cons 1 (Cons 2 (Cons 3 (Cons 1 (Cons 2 ...
</pre></div></div><div class="top"><p class="src"><a name="v:unfold" class="def">unfold</a> ::  (c -&gt; (a, c)) -&gt; c -&gt; <a href="Data-Stream.html#t:Stream">Stream</a> a<a href="src/Data-Stream.html#unfold" class="link">Source</a></p><div class="doc"><p>The unfold function is similar to the unfold for lists. Note
 there is no base case: all streams must be infinite.
</p></div></div><h1 id="g:5">Extracting sublists
</h1><div class="top"><p class="src"><a name="v:take" class="def">take</a> ::  <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Data-Int.html#t:Int">Int</a> -&gt; <a href="Data-Stream.html#t:Stream">Stream</a> a -&gt; [a]<a href="src/Data-Stream.html#take" class="link">Source</a></p><div class="doc"><p><code><a href="Data-Stream.html#v:take">take</a></code> <code>n</code> <code>xs</code> returns the first <code>n</code> elements of <code>xs</code>.
</p><p><em>Beware</em>: passing a negative integer as the first argument will
 cause an error.
</p></div></div><div class="top"><p class="src"><a name="v:drop" class="def">drop</a> ::  <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Data-Int.html#t:Int">Int</a> -&gt; <a href="Data-Stream.html#t:Stream">Stream</a> a -&gt; <a href="Data-Stream.html#t:Stream">Stream</a> a<a href="src/Data-Stream.html#drop" class="link">Source</a></p><div class="doc"><p><code><a href="Data-Stream.html#v:drop">drop</a></code> <code>n</code> <code>xs</code> drops the first <code>n</code> elements off the front of
 the sequence <code>xs</code>.
</p><p><em>Beware</em>: passing a negative integer as the first argument will
 cause an error.
</p></div></div><div class="top"><p class="src"><a name="v:splitAt" class="def">splitAt</a> ::  <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Data-Int.html#t:Int">Int</a> -&gt; <a href="Data-Stream.html#t:Stream">Stream</a> a -&gt; ([a], <a href="Data-Stream.html#t:Stream">Stream</a> a)<a href="src/Data-Stream.html#splitAt" class="link">Source</a></p><div class="doc"><p>The <code><a href="Data-Stream.html#v:splitAt">splitAt</a></code> function takes an integer <code>n</code> and a stream <code>xs</code>
 and returns a pair consisting of the prefix of <code>xs</code> of length
 <code>n</code> and the remaining stream immediately following this prefix.
</p><p><em>Beware</em>: passing a negative integer as the first argument will
 cause an error.
</p></div></div><div class="top"><p class="src"><a name="v:takeWhile" class="def">takeWhile</a> ::  (a -&gt; <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Data-Bool.html#t:Bool">Bool</a>) -&gt; <a href="Data-Stream.html#t:Stream">Stream</a> a -&gt; [a]<a href="src/Data-Stream.html#takeWhile" class="link">Source</a></p><div class="doc"><p><code><a href="Data-Stream.html#v:takeWhile">takeWhile</a></code> <code>p</code> <code>xs</code> returns the longest prefix of the stream
 <code>xs</code> for which the predicate <code>p</code> holds.
</p></div></div><div class="top"><p class="src"><a name="v:dropWhile" class="def">dropWhile</a> ::  (a -&gt; <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Data-Bool.html#t:Bool">Bool</a>) -&gt; <a href="Data-Stream.html#t:Stream">Stream</a> a -&gt; <a href="Data-Stream.html#t:Stream">Stream</a> a<a href="src/Data-Stream.html#dropWhile" class="link">Source</a></p><div class="doc"><p><code><a href="Data-Stream.html#v:dropWhile">dropWhile</a></code> <code>p</code> <code>xs</code> returns the suffix remaining after
 <code><a href="Data-Stream.html#v:takeWhile">takeWhile</a></code> <code>p</code> <code>xs</code>.
</p><p><em>Beware</em>: this function may diverge if every element of <code>xs</code>
 satisfies <code>p</code>, e.g.  <code>dropWhile even (repeat 0)</code> will loop.
</p></div></div><div class="top"><p class="src"><a name="v:span" class="def">span</a> ::  (a -&gt; <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Data-Bool.html#t:Bool">Bool</a>) -&gt; <a href="Data-Stream.html#t:Stream">Stream</a> a -&gt; ([a], <a href="Data-Stream.html#t:Stream">Stream</a> a)<a href="src/Data-Stream.html#span" class="link">Source</a></p><div class="doc"><p><code><a href="Data-Stream.html#v:span">span</a></code> <code>p</code> <code>xs</code> returns the longest prefix of <code>xs</code> that satisfies
 <code>p</code>, together with the remainder of the stream.
</p></div></div><div class="top"><p class="src"><a name="v:break" class="def">break</a> ::  (a -&gt; <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Data-Bool.html#t:Bool">Bool</a>) -&gt; <a href="Data-Stream.html#t:Stream">Stream</a> a -&gt; ([a], <a href="Data-Stream.html#t:Stream">Stream</a> a)<a href="src/Data-Stream.html#break" class="link">Source</a></p><div class="doc"><p>The <code><a href="Data-Stream.html#v:break">break</a></code> <code>p</code> function is equivalent to <code><a href="Data-Stream.html#v:span">span</a></code> <code>not . p</code>.
</p></div></div><div class="top"><p class="src"><a name="v:filter" class="def">filter</a> ::  (a -&gt; <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Data-Bool.html#t:Bool">Bool</a>) -&gt; <a href="Data-Stream.html#t:Stream">Stream</a> a -&gt; <a href="Data-Stream.html#t:Stream">Stream</a> a<a href="src/Data-Stream.html#filter" class="link">Source</a></p><div class="doc"><p><code><a href="Data-Stream.html#v:filter">filter</a></code> <code>p</code> <code>xs</code>, removes any elements from <code>xs</code> that do not satisfy <code>p</code>.
</p><p><em>Beware</em>: this function may diverge if there is no element of
 <code>xs</code> that satisfies <code>p</code>, e.g.  <code>filter odd (repeat 0)</code> will loop.
</p></div></div><div class="top"><p class="src"><a name="v:partition" class="def">partition</a> ::  (a -&gt; <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Data-Bool.html#t:Bool">Bool</a>) -&gt; <a href="Data-Stream.html#t:Stream">Stream</a> a -&gt; (<a href="Data-Stream.html#t:Stream">Stream</a> a, <a href="Data-Stream.html#t:Stream">Stream</a> a)<a href="src/Data-Stream.html#partition" class="link">Source</a></p><div class="doc"><p>The <code><a href="Data-Stream.html#v:partition">partition</a></code> function takes a predicate <code>p</code> and a stream
 <code>xs</code>, and returns a pair of streams. The first stream corresponds
 to the elements of <code>xs</code> for which <code>p</code> holds; the second stream
 corresponds to the elements of <code>xs</code> for which <code>p</code> does not hold.
</p><p><em>Beware</em>: One of the elements of the tuple may be undefined. For
 example, <code>fst (partition even (repeat 0)) == repeat 0</code>; on the
 other hand <code>snd (partition even (repeat 0))</code> is undefined.
</p></div></div><div class="top"><p class="src"><a name="v:group" class="def">group</a> :: <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Data-Eq.html#t:Eq">Eq</a> a =&gt; <a href="Data-Stream.html#t:Stream">Stream</a> a -&gt; <a href="Data-Stream.html#t:Stream">Stream</a> [a]<a href="src/Data-Stream.html#group" class="link">Source</a></p><div class="doc"><p>The <code><a href="Data-Stream.html#v:group">group</a></code> function takes a stream and returns a stream of
 lists such that flattening the resulting stream is equal to the
 argument.  Moreover, each sublist in the resulting stream
 contains only equal elements.  For example,
</p><pre> group $ cycle &quot;Mississippi&quot; = &quot;M&quot; ::: &quot;i&quot; ::: &quot;ss&quot; ::: &quot;i&quot; ::: &quot;ss&quot; ::: &quot;i&quot; ::: &quot;pp&quot; ::: &quot;i&quot; ::: &quot;M&quot; ::: &quot;i&quot; ::: ...
</pre></div></div><h1 id="g:6">Sublist predicates
</h1><div class="top"><p class="src"><a name="v:isPrefixOf" class="def">isPrefixOf</a> :: <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Data-Eq.html#t:Eq">Eq</a> a =&gt; [a] -&gt; <a href="Data-Stream.html#t:Stream">Stream</a> a -&gt; <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Data-Bool.html#t:Bool">Bool</a><a href="src/Data-Stream.html#isPrefixOf" class="link">Source</a></p><div class="doc"><p>The <code>isPrefix</code> function returns <code>True</code> if the first argument is
 a prefix of the second.
</p></div></div><h1 id="g:7">Indexing streams
</h1><div class="top"><p class="src"><a name="v:-33--33-" class="def">(!!)</a> ::  <a href="Data-Stream.html#t:Stream">Stream</a> a -&gt; <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Data-Int.html#t:Int">Int</a> -&gt; a<a href="src/Data-Stream.html#%21%21" class="link">Source</a></p><div class="doc"><p><code>xs !! n</code> returns the element of the stream <code>xs</code> at index
 <code>n</code>. Note that the head of the stream has index 0.
</p><p><em>Beware</em>: passing a negative integer as the first argument will cause
 an error.
</p></div></div><div class="top"><p class="src"><a name="v:elemIndex" class="def">elemIndex</a> :: <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Data-Eq.html#t:Eq">Eq</a> a =&gt; a -&gt; <a href="Data-Stream.html#t:Stream">Stream</a> a -&gt; <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Data-Int.html#t:Int">Int</a><a href="src/Data-Stream.html#elemIndex" class="link">Source</a></p><div class="doc"><p>The <code><a href="Data-Stream.html#v:elemIndex">elemIndex</a></code> function returns the index of the first element
 in the given stream which is equal (by <code><a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Data-Eq.html#v:-61--61-">==</a></code>) to the query element,
</p><p><em>Beware</em>: <code><a href="Data-Stream.html#v:elemIndex">elemIndex</a></code> <code>x</code> <code>xs</code> will diverge if none of the elements
 of <code>xs</code> equal <code>x</code>.
</p></div></div><div class="top"><p class="src"><a name="v:elemIndices" class="def">elemIndices</a> :: <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Data-Eq.html#t:Eq">Eq</a> a =&gt; a -&gt; <a href="Data-Stream.html#t:Stream">Stream</a> a -&gt; <a href="Data-Stream.html#t:Stream">Stream</a> <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Data-Int.html#t:Int">Int</a><a href="src/Data-Stream.html#elemIndices" class="link">Source</a></p><div class="doc"><p>The <code><a href="Data-Stream.html#v:elemIndices">elemIndices</a></code> function extends <code><a href="Data-Stream.html#v:elemIndex">elemIndex</a></code>, by returning the
 indices of all elements equal to the query element, in ascending order.
</p><p><em>Beware</em>: <code><a href="Data-Stream.html#v:elemIndices">elemIndices</a></code> <code>x</code> <code>xs</code> will diverge if any suffix of
 <code>xs</code> does not contain <code>x</code>.
</p></div></div><div class="top"><p class="src"><a name="v:findIndex" class="def">findIndex</a> ::  (a -&gt; <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Data-Bool.html#t:Bool">Bool</a>) -&gt; <a href="Data-Stream.html#t:Stream">Stream</a> a -&gt; <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Data-Int.html#t:Int">Int</a><a href="src/Data-Stream.html#findIndex" class="link">Source</a></p><div class="doc"><p>The <code><a href="Data-Stream.html#v:findIndex">findIndex</a></code> function takes a predicate and a stream and returns
 the index of the first element in the stream that satisfies the predicate,
</p><p><em>Beware</em>: <code><a href="Data-Stream.html#v:findIndex">findIndex</a></code> <code>p</code> <code>xs</code> will diverge if none of the elements of
 <code>xs</code> satisfy <code>p</code>.
</p></div></div><div class="top"><p class="src"><a name="v:findIndices" class="def">findIndices</a> ::  (a -&gt; <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Data-Bool.html#t:Bool">Bool</a>) -&gt; <a href="Data-Stream.html#t:Stream">Stream</a> a -&gt; <a href="Data-Stream.html#t:Stream">Stream</a> <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Data-Int.html#t:Int">Int</a><a href="src/Data-Stream.html#findIndices" class="link">Source</a></p><div class="doc"><p>The <code><a href="Data-Stream.html#v:findIndices">findIndices</a></code> function extends <code><a href="Data-Stream.html#v:findIndex">findIndex</a></code>, by returning the
 indices of all elements satisfying the predicate, in ascending
 order.
</p><p><em>Beware</em>: <code><a href="Data-Stream.html#v:findIndices">findIndices</a></code> <code>p</code> <code>xs</code> will diverge if all the elements
 of any suffix of <code>xs</code> fails to satisfy <code>p</code>.
</p></div></div><h1 id="g:8">Zipping and unzipping streams
</h1><div class="top"><p class="src"><a name="v:zip" class="def">zip</a> ::  <a href="Data-Stream.html#t:Stream">Stream</a> a -&gt; <a href="Data-Stream.html#t:Stream">Stream</a> b -&gt; <a href="Data-Stream.html#t:Stream">Stream</a> (a, b)<a href="src/Data-Stream.html#zip" class="link">Source</a></p><div class="doc"><p>The <code><a href="Data-Stream.html#v:zip">zip</a></code> function takes two streams and returns a list of
 corresponding pairs.
</p></div></div><div class="top"><p class="src"><a name="v:zipWith" class="def">zipWith</a> ::  (a -&gt; b -&gt; c) -&gt; <a href="Data-Stream.html#t:Stream">Stream</a> a -&gt; <a href="Data-Stream.html#t:Stream">Stream</a> b -&gt; <a href="Data-Stream.html#t:Stream">Stream</a> c<a href="src/Data-Stream.html#zipWith" class="link">Source</a></p><div class="doc"><p>The <code><a href="Data-Stream.html#v:zipWith">zipWith</a></code> function generalizes <code><a href="Data-Stream.html#v:zip">zip</a></code>. Rather than tupling
 the functions, the elements are combined using the function
 passed as the first argument to <code><a href="Data-Stream.html#v:zipWith">zipWith</a></code>.
</p></div></div><div class="top"><p class="src"><a name="v:unzip" class="def">unzip</a> ::  <a href="Data-Stream.html#t:Stream">Stream</a> (a, b) -&gt; (<a href="Data-Stream.html#t:Stream">Stream</a> a, <a href="Data-Stream.html#t:Stream">Stream</a> b)<a href="src/Data-Stream.html#unzip" class="link">Source</a></p><div class="doc"><p>The <code><a href="Data-Stream.html#v:unzip">unzip</a></code> function is the inverse of the <code><a href="Data-Stream.html#v:zip">zip</a></code> function.
</p></div></div><h1 id="g:9">Functions on streams of characters
</h1><div class="top"><p class="src"><a name="v:words" class="def">words</a> :: <a href="Data-Stream.html#t:Stream">Stream</a> <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Data-Char.html#t:Char">Char</a> -&gt; <a href="Data-Stream.html#t:Stream">Stream</a> <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Data-Char.html#t:String">String</a><a href="src/Data-Stream.html#words" class="link">Source</a></p><div class="doc"><p>The <code><a href="Data-Stream.html#v:words">words</a></code> function breaks a stream of characters into a
 stream of words, which were delimited by white space.
</p><p><em>Beware</em>: if the stream of characters <code>xs</code> does not contain white
 space, accessing the tail of <code>words xs</code> will loop.
</p></div></div><div class="top"><p class="src"><a name="v:unwords" class="def">unwords</a> :: <a href="Data-Stream.html#t:Stream">Stream</a> <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Data-Char.html#t:String">String</a> -&gt; <a href="Data-Stream.html#t:Stream">Stream</a> <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Data-Char.html#t:Char">Char</a><a href="src/Data-Stream.html#unwords" class="link">Source</a></p><div class="doc"><p>The <code><a href="Data-Stream.html#v:unwords">unwords</a></code> function is an inverse operation to <code><a href="Data-Stream.html#v:words">words</a></code>. It
 joins words with separating spaces.
</p></div></div><div class="top"><p class="src"><a name="v:lines" class="def">lines</a> :: <a href="Data-Stream.html#t:Stream">Stream</a> <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Data-Char.html#t:Char">Char</a> -&gt; <a href="Data-Stream.html#t:Stream">Stream</a> <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Data-Char.html#t:String">String</a><a href="src/Data-Stream.html#lines" class="link">Source</a></p><div class="doc"><p>The <code><a href="Data-Stream.html#v:lines">lines</a></code> function breaks a stream of characters into a list
 of strings at newline characters. The resulting strings do not
 contain newlines.
</p><p><em>Beware</em>: if the stream of characters <code>xs</code> does not contain
 newline characters, accessing the tail of <code>lines xs</code> will loop.
</p></div></div><div class="top"><p class="src"><a name="v:unlines" class="def">unlines</a> :: <a href="Data-Stream.html#t:Stream">Stream</a> <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Data-Char.html#t:String">String</a> -&gt; <a href="Data-Stream.html#t:Stream">Stream</a> <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Data-Char.html#t:Char">Char</a><a href="src/Data-Stream.html#unlines" class="link">Source</a></p><div class="doc"><p>The <code><a href="Data-Stream.html#v:unlines">unlines</a></code> function is an inverse operation to <code><a href="Data-Stream.html#v:lines">lines</a></code>. It
 joins lines, after appending a terminating newline to each.
</p></div></div><h1 id="g:10">Converting to and from an infinite list
</h1><div class="top"><p class="src"><a name="v:toList" class="def">toList</a> ::  <a href="Data-Stream.html#t:Stream">Stream</a> a -&gt; [a]<a href="src/Data-Stream.html#toList" class="link">Source</a></p><div class="doc"><p>The <code><a href="Data-Stream.html#v:toList">toList</a></code> converts a stream into an infinite list.
</p></div></div><div class="top"><p class="src"><a name="v:fromList" class="def">fromList</a> ::  [a] -&gt; <a href="Data-Stream.html#t:Stream">Stream</a> a<a href="src/Data-Stream.html#fromList" class="link">Source</a></p><div class="doc"><p>The <code><a href="Data-Stream.html#v:fromList">fromList</a></code> converts an infinite list to a
 stream.
</p><p><em>Beware</em>: Passing a finite list, will cause an error.
</p></div></div></div></div><div id="footer"><p>Produced by <a href="http://www.haskell.org/haddock/">Haddock</a> version 2.9.2</p></div></body></html>