<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <meta http-equiv="x-ua-compatible" content="ie=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="generator" content="ExDoc v0.19.1"> <title>Stream – Elixir v1.7.2</title> <link rel="stylesheet" href="dist/app-240d7fc7e5.css" /> <link rel="canonical" href="https://hexdocs.pm/elixir/v1.7/Stream.html" /> <script src="dist/sidebar_items-cdf4e58b19.js"></script> </head> <body data-type="modules"> <script>try { if(localStorage.getItem('night-mode')) document.body.className += ' night-mode'; } catch (e) { }</script> <div class="main"> <button class="sidebar-button sidebar-toggle"> <span class="icon-menu" aria-hidden="true"></span> <span class="sr-only">Toggle Sidebar</span> </button> <button class="sidebar-button night-mode-toggle"> <span class="icon-theme" aria-hidden="true"></span> <span class="sr-only">Toggle Theme</span> </button> <section class="sidebar"> <a href="http://elixir-lang.org/docs.html" class="sidebar-projectLink"> <div class="sidebar-projectDetails"> <h1 class="sidebar-projectName"> Elixir </h1> <h2 class="sidebar-projectVersion"> v1.7.2 </h2> </div> <img src="assets/logo.png" alt="Elixir" class="sidebar-projectImage"> </a> <form class="sidebar-search" action="search.html"> <button type="submit" class="search-button"> <span class="icon-search" aria-hidden="true"></span> </button> <input name="q" type="text" id="search-list" class="search-input" placeholder="Search" aria-label="Search" autocomplete="off" /> </form> <ul class="sidebar-listNav"> <li><a id="extras-list" href="#full-list">Pages</a></li> <li><a id="modules-list" href="#full-list">Modules</a></li> <li><a id="exceptions-list" href="#full-list">Exceptions</a></li> </ul> <div class="gradient"></div> <ul id="full-list" class="sidebar-fullList"></ul> </section> <section class="content"> <div class="content-outer"> <div id="content" class="content-inner"> <h1> <small class="visible-xs">Elixir v1.7.2</small> Stream <a href="https://github.com/elixir-lang/elixir/blob/v1.7.2/lib/elixir/lib/stream.ex#L1" title="View Source" class="view-source" rel="help"> <span class="icon-code" aria-hidden="true"></span> <span class="sr-only">View Source</span> </a> </h1> <section id="moduledoc"> <p>Functions for creating and composing streams.</p> <p>Streams are composable, lazy enumerables (for an introduction on enumerables, see the <a href="Enum.html"><code class="inline">Enum</code></a> module). Any enumerable that generates items one by one during enumeration is called a stream. For example, Elixir’s <a href="Range.html"><code class="inline">Range</code></a> is a stream:</p> <pre><code class="nohighlight makeup elixir"><span class="gp unselectable">iex> </span><span class="n">range</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">1</span><span class="o">.</span><span class="o">.</span><span class="mi">5</span><span class="w"> </span><span class="mi">1</span><span class="o">.</span><span class="o">.</span><span class="mi">5</span><span class="w"> </span><span class="gp unselectable">iex> </span><span class="nc">Enum</span><span class="o">.</span><span class="n">map</span><span class="p" data-group-id="1389359407-1">(</span><span class="n">range</span><span class="p">,</span><span class="w"> </span><span class="o">&</span><span class="p" data-group-id="1389359407-2">(</span><span class="ni">&1</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="mi">2</span><span class="p" data-group-id="1389359407-2">)</span><span class="p" data-group-id="1389359407-1">)</span><span class="w"> </span><span class="p" data-group-id="1389359407-3">[</span><span class="mi">2</span><span class="p">,</span><span class="w"> </span><span class="mi">4</span><span class="p">,</span><span class="w"> </span><span class="mi">6</span><span class="p">,</span><span class="w"> </span><span class="mi">8</span><span class="p">,</span><span class="w"> </span><span class="mi">10</span><span class="p" data-group-id="1389359407-3">]</span></code></pre> <p>In the example above, as we mapped over the range, the elements being enumerated were created one by one, during enumeration. The <a href="Stream.html#content"><code class="inline">Stream</code></a> module allows us to map the range, without triggering its enumeration:</p> <pre><code class="nohighlight makeup elixir"><span class="gp unselectable">iex> </span><span class="n">range</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">1</span><span class="o">.</span><span class="o">.</span><span class="mi">3</span><span class="w"> </span><span class="gp unselectable">iex> </span><span class="n">stream</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nc">Stream</span><span class="o">.</span><span class="n">map</span><span class="p" data-group-id="3367358454-1">(</span><span class="n">range</span><span class="p">,</span><span class="w"> </span><span class="o">&</span><span class="p" data-group-id="3367358454-2">(</span><span class="ni">&1</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="mi">2</span><span class="p" data-group-id="3367358454-2">)</span><span class="p" data-group-id="3367358454-1">)</span><span class="w"> </span><span class="gp unselectable">iex> </span><span class="nc">Enum</span><span class="o">.</span><span class="n">map</span><span class="p" data-group-id="3367358454-3">(</span><span class="n">stream</span><span class="p">,</span><span class="w"> </span><span class="o">&</span><span class="p" data-group-id="3367358454-4">(</span><span class="ni">&1</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="mi">1</span><span class="p" data-group-id="3367358454-4">)</span><span class="p" data-group-id="3367358454-3">)</span><span class="w"> </span><span class="p" data-group-id="3367358454-5">[</span><span class="mi">3</span><span class="p">,</span><span class="w"> </span><span class="mi">5</span><span class="p">,</span><span class="w"> </span><span class="mi">7</span><span class="p" data-group-id="3367358454-5">]</span></code></pre> <p>Notice we started with a range and then we created a stream that is meant to multiply each item in the range by 2. At this point, no computation was done. Only when <a href="Enum.html#map/2"><code class="inline">Enum.map/2</code></a> is called we actually enumerate over each item in the range, multiplying it by 2 and adding 1. We say the functions in <a href="Stream.html#content"><code class="inline">Stream</code></a> are <em>lazy</em> and the functions in <a href="Enum.html"><code class="inline">Enum</code></a> are <em>eager</em>.</p> <p>Due to their laziness, streams are useful when working with large (or even infinite) collections. When chaining many operations with <a href="Enum.html"><code class="inline">Enum</code></a>, intermediate lists are created, while <a href="Stream.html#content"><code class="inline">Stream</code></a> creates a recipe of computations that are executed at a later moment. Let’s see another example:</p> <pre><code class="nohighlight makeup elixir"><span class="mi">1</span><span class="o">.</span><span class="o">.</span><span class="mi">3</span><span class="w"> </span><span class="o">|></span><span class="w"> </span><span class="nc">Enum</span><span class="o">.</span><span class="n">map</span><span class="p" data-group-id="0071064503-1">(</span><span class="o">&</span><span class="nc">IO</span><span class="o">.</span><span class="n">inspect</span><span class="p" data-group-id="0071064503-2">(</span><span class="ni">&1</span><span class="p" data-group-id="0071064503-2">)</span><span class="p" data-group-id="0071064503-1">)</span><span class="w"> </span><span class="o">|></span><span class="w"> </span><span class="nc">Enum</span><span class="o">.</span><span class="n">map</span><span class="p" data-group-id="0071064503-3">(</span><span class="o">&</span><span class="p" data-group-id="0071064503-4">(</span><span class="ni">&1</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="mi">2</span><span class="p" data-group-id="0071064503-4">)</span><span class="p" data-group-id="0071064503-3">)</span><span class="w"> </span><span class="o">|></span><span class="w"> </span><span class="nc">Enum</span><span class="o">.</span><span class="n">map</span><span class="p" data-group-id="0071064503-5">(</span><span class="o">&</span><span class="nc">IO</span><span class="o">.</span><span class="n">inspect</span><span class="p" data-group-id="0071064503-6">(</span><span class="ni">&1</span><span class="p" data-group-id="0071064503-6">)</span><span class="p" data-group-id="0071064503-5">)</span><span class="w"> </span><span class="mi">1</span><span class="w"> </span><span class="mi">2</span><span class="w"> </span><span class="mi">3</span><span class="w"> </span><span class="mi">2</span><span class="w"> </span><span class="mi">4</span><span class="w"> </span><span class="mi">6</span><span class="w"> </span><span class="c1">#=> [2, 4, 6]</span></code></pre> <p>Notice that we first printed each item in the list, then multiplied each element by 2 and finally printed each new value. In this example, the list was enumerated three times. Let’s see an example with streams:</p> <pre><code class="nohighlight makeup elixir"><span class="n">stream</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">1</span><span class="o">.</span><span class="o">.</span><span class="mi">3</span><span class="w"> </span><span class="o">|></span><span class="w"> </span><span class="nc">Stream</span><span class="o">.</span><span class="n">map</span><span class="p" data-group-id="0483725559-1">(</span><span class="o">&</span><span class="nc">IO</span><span class="o">.</span><span class="n">inspect</span><span class="p" data-group-id="0483725559-2">(</span><span class="ni">&1</span><span class="p" data-group-id="0483725559-2">)</span><span class="p" data-group-id="0483725559-1">)</span><span class="w"> </span><span class="o">|></span><span class="w"> </span><span class="nc">Stream</span><span class="o">.</span><span class="n">map</span><span class="p" data-group-id="0483725559-3">(</span><span class="o">&</span><span class="p" data-group-id="0483725559-4">(</span><span class="ni">&1</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="mi">2</span><span class="p" data-group-id="0483725559-4">)</span><span class="p" data-group-id="0483725559-3">)</span><span class="w"> </span><span class="o">|></span><span class="w"> </span><span class="nc">Stream</span><span class="o">.</span><span class="n">map</span><span class="p" data-group-id="0483725559-5">(</span><span class="o">&</span><span class="nc">IO</span><span class="o">.</span><span class="n">inspect</span><span class="p" data-group-id="0483725559-6">(</span><span class="ni">&1</span><span class="p" data-group-id="0483725559-6">)</span><span class="p" data-group-id="0483725559-5">)</span><span class="w"> </span><span class="nc">Enum</span><span class="o">.</span><span class="n">to_list</span><span class="p" data-group-id="0483725559-7">(</span><span class="n">stream</span><span class="p" data-group-id="0483725559-7">)</span><span class="w"> </span><span class="mi">1</span><span class="w"> </span><span class="mi">2</span><span class="w"> </span><span class="mi">2</span><span class="w"> </span><span class="mi">4</span><span class="w"> </span><span class="mi">3</span><span class="w"> </span><span class="mi">6</span><span class="w"> </span><span class="c1">#=> [2, 4, 6]</span></code></pre> <p>Although the end result is the same, the order in which the items were printed changed! With streams, we print the first item and then print its double. In this example, the list was enumerated just once!</p> <p>That’s what we meant when we said earlier that streams are composable, lazy enumerables. Notice we could call <a href="Stream.html#map/2"><code class="inline">Stream.map/2</code></a> multiple times, effectively composing the streams and keeping them lazy. The computations are only performed when you call a function from the <a href="Enum.html"><code class="inline">Enum</code></a> module.</p> <h2 id="module-creating-streams" class="section-heading"> <a href="#module-creating-streams" class="hover-link"><span class="icon-link" aria-hidden="true"></span></a> Creating Streams </h2> <p>There are many functions in Elixir’s standard library that return streams, some examples are:</p> <ul> <li><a href="IO.html#stream/2"><code class="inline">IO.stream/2</code></a> - streams input lines, one by one </li> <li><a href="URI.html#query_decoder/1"><code class="inline">URI.query_decoder/1</code></a> - decodes a query string, pair by pair </li> </ul> <p>This module also provides many convenience functions for creating streams, like <a href="Stream.html#cycle/1"><code class="inline">Stream.cycle/1</code></a>, <a href="Stream.html#unfold/2"><code class="inline">Stream.unfold/2</code></a>, <a href="Stream.html#resource/3"><code class="inline">Stream.resource/3</code></a> and more.</p> <p>Note the functions in this module are guaranteed to return enumerables. Since enumerables can have different shapes (structs, anonymous functions, and so on), the functions in this module may return any of those shapes and this may change at any time. For example, a function that today returns an anonymous function may return a struct in future releases.</p> </section> <section id="summary" class="details-list"> <h1 class="section-heading"> <a class="hover-link" href="#summary"> <span class="icon-link" aria-hidden="true"></span> <span class="sr-only">Link to this section</span> </a> Summary </h1> <div class="summary-types summary"> <h2> <a href="#types">Types</a> </h2> <div class="summary-row"> <div class="summary-signature"> <a href="#t:acc/0">acc()</a> </div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="#t:default/0">default()</a> </div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="#t:element/0">element()</a> </div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="#t:index/0">index()</a> </div> </div> </div> <div class="summary-functions summary"> <h2> <a href="#functions">Functions</a> </h2> <div class="summary-row"> <div class="summary-signature"> <a href="#chunk_by/2">chunk_by(enum, fun)</a> </div> <div class="summary-synopsis"><p>Chunks the <code class="inline">enum</code> by buffering elements for which <code class="inline">fun</code> returns the same value</p> </div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="#chunk_every/2">chunk_every(enum, count)</a> </div> <div class="summary-synopsis"><p>Shortcut to <code class="inline">chunk_every(enum, count, count)</code></p> </div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="#chunk_every/4">chunk_every(enum, count, step, leftover \\ [])</a> </div> <div class="summary-synopsis"><p>Streams the enumerable in chunks, containing <code class="inline">count</code> items each, where each new chunk starts <code class="inline">step</code> elements into the enumerable</p> </div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="#chunk_while/4">chunk_while(enum, acc, chunk_fun, after_fun)</a> </div> <div class="summary-synopsis"><p>Chunks the <code class="inline">enum</code> with fine grained control when every chunk is emitted</p> </div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="#concat/1">concat(enumerables)</a> </div> <div class="summary-synopsis"><p>Creates a stream that enumerates each enumerable in an enumerable</p> </div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="#concat/2">concat(first, second)</a> </div> <div class="summary-synopsis"><p>Creates a stream that enumerates the first argument, followed by the second</p> </div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="#cycle/1">cycle(enumerable)</a> </div> <div class="summary-synopsis"><p>Creates a stream that cycles through the given enumerable, infinitely</p> </div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="#dedup/1">dedup(enum)</a> </div> <div class="summary-synopsis"><p>Creates a stream that only emits elements if they are different from the last emitted element</p> </div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="#dedup_by/2">dedup_by(enum, fun)</a> </div> <div class="summary-synopsis"><p>Creates a stream that only emits elements if the result of calling <code class="inline">fun</code> on the element is different from the (stored) result of calling <code class="inline">fun</code> on the last emitted element</p> </div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="#drop/2">drop(enum, n)</a> </div> <div class="summary-synopsis"><p>Lazily drops the next <code class="inline">n</code> items from the enumerable</p> </div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="#drop_every/2">drop_every(enum, nth)</a> </div> <div class="summary-synopsis"><p>Creates a stream that drops every <code class="inline">nth</code> item from the enumerable</p> </div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="#drop_while/2">drop_while(enum, fun)</a> </div> <div class="summary-synopsis"><p>Lazily drops elements of the enumerable while the given function returns a truthy value</p> </div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="#each/2">each(enum, fun)</a> </div> <div class="summary-synopsis"><p>Executes the given function for each item</p> </div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="#filter/2">filter(enum, fun)</a> </div> <div class="summary-synopsis"><p>Creates a stream that filters elements according to the given function on enumeration</p> </div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="#flat_map/2">flat_map(enum, mapper)</a> </div> <div class="summary-synopsis"><p>Maps the given <code class="inline">fun</code> over <code class="inline">enumerable</code> and flattens the result</p> </div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="#intersperse/2">intersperse(enumerable, intersperse_element)</a> </div> <div class="summary-synopsis"><p>Lazily intersperses <code class="inline">intersperse_element</code> between each element of the enumeration</p> </div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="#interval/1">interval(n)</a> </div> <div class="summary-synopsis"><p>Creates a stream that emits a value after the given period <code class="inline">n</code> in milliseconds</p> </div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="#into/3">into(enum, collectable, transform \\ fn x -> x end)</a> </div> <div class="summary-synopsis"><p>Injects the stream values into the given collectable as a side-effect</p> </div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="#iterate/2">iterate(start_value, next_fun)</a> </div> <div class="summary-synopsis"><p>Emits a sequence of values, starting with <code class="inline">start_value</code>. Successive values are generated by calling <code class="inline">next_fun</code> on the previous value</p> </div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="#map/2">map(enum, fun)</a> </div> <div class="summary-synopsis"><p>Creates a stream that will apply the given function on enumeration</p> </div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="#map_every/3">map_every(enum, nth, fun)</a> </div> <div class="summary-synopsis"><p>Creates a stream that will apply the given function on every <code class="inline">nth</code> item from the enumerable</p> </div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="#reject/2">reject(enum, fun)</a> </div> <div class="summary-synopsis"><p>Creates a stream that will reject elements according to the given function on enumeration</p> </div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="#repeatedly/1">repeatedly(generator_fun)</a> </div> <div class="summary-synopsis"><p>Returns a stream generated by calling <code class="inline">generator_fun</code> repeatedly</p> </div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="#resource/3">resource(start_fun, next_fun, after_fun)</a> </div> <div class="summary-synopsis"><p>Emits a sequence of values for the given resource</p> </div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="#run/1">run(stream)</a> </div> <div class="summary-synopsis"><p>Runs the given stream</p> </div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="#scan/2">scan(enum, fun)</a> </div> <div class="summary-synopsis"><p>Creates a stream that applies the given function to each element, emits the result and uses the same result as the accumulator for the next computation. Uses the first element in the enumerable as the starting value</p> </div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="#scan/3">scan(enum, acc, fun)</a> </div> <div class="summary-synopsis"><p>Creates a stream that applies the given function to each element, emits the result and uses the same result as the accumulator for the next computation. Uses the given <code class="inline">acc</code> as the starting value</p> </div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="#take/2">take(enum, count)</a> </div> <div class="summary-synopsis"><p>Lazily takes the next <code class="inline">count</code> items from the enumerable and stops enumeration</p> </div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="#take_every/2">take_every(enum, nth)</a> </div> <div class="summary-synopsis"><p>Creates a stream that takes every <code class="inline">nth</code> item from the enumerable</p> </div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="#take_while/2">take_while(enum, fun)</a> </div> <div class="summary-synopsis"><p>Lazily takes elements of the enumerable while the given function returns a truthy value</p> </div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="#timer/1">timer(n)</a> </div> <div class="summary-synopsis"><p>Creates a stream that emits a single value after <code class="inline">n</code> milliseconds</p> </div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="#transform/3">transform(enum, acc, reducer)</a> </div> <div class="summary-synopsis"><p>Transforms an existing stream</p> </div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="#transform/4">transform(enum, start_fun, reducer, after_fun)</a> </div> <div class="summary-synopsis"><p>Transforms an existing stream with function-based start and finish</p> </div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="#unfold/2">unfold(next_acc, next_fun)</a> </div> <div class="summary-synopsis"><p>Emits a sequence of values for the given accumulator</p> </div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="#uniq/1">uniq(enum)</a> </div> <div class="summary-synopsis"><p>Creates a stream that only emits elements if they are unique</p> </div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="#uniq_by/2">uniq_by(enum, fun)</a> </div> <div class="summary-synopsis"><p>Creates a stream that only emits elements if they are unique, by removing the elements for which function <code class="inline">fun</code> returned duplicate items</p> </div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="#with_index/2">with_index(enum, offset \\ 0)</a> </div> <div class="summary-synopsis"><p>Creates a stream where each item in the enumerable will be wrapped in a tuple alongside its index</p> </div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="#zip/1">zip(enumerables)</a> </div> <div class="summary-synopsis"><p>Zips corresponding elements from a finite collection of enumerables into one stream of tuples</p> </div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="#zip/2">zip(left, right)</a> </div> <div class="summary-synopsis"><p>Zips two collections together, lazily</p> </div> </div> </div> </section> <section id="types" class="details-list"> <h1 class="section-heading"> <a class="hover-link" href="#types"> <span class="icon-link" aria-hidden="true"></span> <span class="sr-only">Link to this section</span> </a> Types </h1> <div class="types-list"> <div class="detail" id="t:acc/0"> <div class="detail-header"> <a href="#t:acc/0" class="detail-link" title="Link to this type"> <span class="icon-link" aria-hidden="true"></span> <span class="sr-only">Link to this type</span> </a> <span class="signature">acc()</span> <a href="https://github.com/elixir-lang/elixir/blob/v1.7.2/lib/elixir/lib/stream.ex#L96" class="view-source" rel="help" title="View Source"> <span class="icon-code" aria-hidden="true"></span> <span class="sr-only">View Source</span> </a> <div class="specs"> <pre>acc() :: <a href="typespecs.html#basic-types">any</a>()</pre> </div> </div> <section class="docstring"> </section> </div> <div class="detail" id="t:default/0"> <div class="detail-header"> <a href="#t:default/0" class="detail-link" title="Link to this type"> <span class="icon-link" aria-hidden="true"></span> <span class="sr-only">Link to this type</span> </a> <span class="signature">default()</span> <a href="https://github.com/elixir-lang/elixir/blob/v1.7.2/lib/elixir/lib/stream.ex#L99" class="view-source" rel="help" title="View Source"> <span class="icon-code" aria-hidden="true"></span> <span class="sr-only">View Source</span> </a> <div class="specs"> <pre>default() :: <a href="typespecs.html#basic-types">any</a>()</pre> </div> </div> <section class="docstring"> </section> </div> <div class="detail" id="t:element/0"> <div class="detail-header"> <a href="#t:element/0" class="detail-link" title="Link to this type"> <span class="icon-link" aria-hidden="true"></span> <span class="sr-only">Link to this type</span> </a> <span class="signature">element()</span> <a href="https://github.com/elixir-lang/elixir/blob/v1.7.2/lib/elixir/lib/stream.ex#L97" class="view-source" rel="help" title="View Source"> <span class="icon-code" aria-hidden="true"></span> <span class="sr-only">View Source</span> </a> <div class="specs"> <pre>element() :: <a href="typespecs.html#basic-types">any</a>()</pre> </div> </div> <section class="docstring"> </section> </div> <div class="detail" id="t:index/0"> <div class="detail-header"> <a href="#t:index/0" class="detail-link" title="Link to this type"> <span class="icon-link" aria-hidden="true"></span> <span class="sr-only">Link to this type</span> </a> <span class="signature">index()</span> <a href="https://github.com/elixir-lang/elixir/blob/v1.7.2/lib/elixir/lib/stream.ex#L98" class="view-source" rel="help" title="View Source"> <span class="icon-code" aria-hidden="true"></span> <span class="sr-only">View Source</span> </a> <div class="specs"> <pre>index() :: <a href="typespecs.html#basic-types">non_neg_integer</a>()</pre> </div> </div> <section class="docstring"> </section> </div> </div> </section> <section id="functions" class="details-list"> <h1 class="section-heading"> <a class="hover-link" href="#functions"> <span class="icon-link" aria-hidden="true"></span> <span class="sr-only">Link to this section</span> </a> Functions </h1> <div class="detail" id="chunk_by/2"> <div class="detail-header"> <a href="#chunk_by/2" class="detail-link" title="Link to this function"> <span class="icon-link" aria-hidden="true"></span> <span class="sr-only">Link to this function</span> </a> <span class="signature">chunk_by(enum, fun)</span> <a href="https://github.com/elixir-lang/elixir/blob/v1.7.2/lib/elixir/lib/stream.ex#L203" class="view-source" rel="help" title="View Source"> <span class="icon-code" aria-hidden="true"></span> <span class="sr-only">View Source</span> </a> <div class="specs"> <pre>chunk_by(<a href="Enumerable.html#t:t/0">Enumerable.t</a>(), (<a href="#t:element/0">element</a>() -> <a href="typespecs.html#basic-types">any</a>())) :: <a href="Enumerable.html#t:t/0">Enumerable.t</a>()</pre> </div> </div> <section class="docstring"> <p>Chunks the <code class="inline">enum</code> by buffering elements for which <code class="inline">fun</code> returns the same value.</p> <p>Elements are only emitted when <code class="inline">fun</code> returns a new value or the <code class="inline">enum</code> finishes.</p> <h2 id="chunk_by/2-examples" class="section-heading"> <a href="#chunk_by/2-examples" class="hover-link"><span class="icon-link" aria-hidden="true"></span></a> Examples </h2> <pre><code class="nohighlight makeup elixir"><span class="gp unselectable">iex> </span><span class="n">stream</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nc">Stream</span><span class="o">.</span><span class="n">chunk_by</span><span class="p" data-group-id="1785943044-1">(</span><span class="p" data-group-id="1785943044-2">[</span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="mi">2</span><span class="p">,</span><span class="w"> </span><span class="mi">2</span><span class="p">,</span><span class="w"> </span><span class="mi">3</span><span class="p">,</span><span class="w"> </span><span class="mi">4</span><span class="p">,</span><span class="w"> </span><span class="mi">4</span><span class="p">,</span><span class="w"> </span><span class="mi">6</span><span class="p">,</span><span class="w"> </span><span class="mi">7</span><span class="p">,</span><span class="w"> </span><span class="mi">7</span><span class="p" data-group-id="1785943044-2">]</span><span class="p">,</span><span class="w"> </span><span class="o">&</span><span class="p" data-group-id="1785943044-3">(</span><span class="n">rem</span><span class="p" data-group-id="1785943044-4">(</span><span class="ni">&1</span><span class="p">,</span><span class="w"> </span><span class="mi">2</span><span class="p" data-group-id="1785943044-4">)</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="mi">1</span><span class="p" data-group-id="1785943044-3">)</span><span class="p" data-group-id="1785943044-1">)</span><span class="w"> </span><span class="gp unselectable">iex> </span><span class="nc">Enum</span><span class="o">.</span><span class="n">to_list</span><span class="p" data-group-id="1785943044-5">(</span><span class="n">stream</span><span class="p" data-group-id="1785943044-5">)</span><span class="w"> </span><span class="p" data-group-id="1785943044-6">[</span><span class="p" data-group-id="1785943044-7">[</span><span class="mi">1</span><span class="p" data-group-id="1785943044-7">]</span><span class="p">,</span><span class="w"> </span><span class="p" data-group-id="1785943044-8">[</span><span class="mi">2</span><span class="p">,</span><span class="w"> </span><span class="mi">2</span><span class="p" data-group-id="1785943044-8">]</span><span class="p">,</span><span class="w"> </span><span class="p" data-group-id="1785943044-9">[</span><span class="mi">3</span><span class="p" data-group-id="1785943044-9">]</span><span class="p">,</span><span class="w"> </span><span class="p" data-group-id="1785943044-10">[</span><span class="mi">4</span><span class="p">,</span><span class="w"> </span><span class="mi">4</span><span class="p">,</span><span class="w"> </span><span class="mi">6</span><span class="p" data-group-id="1785943044-10">]</span><span class="p">,</span><span class="w"> </span><span class="p" data-group-id="1785943044-11">[</span><span class="mi">7</span><span class="p">,</span><span class="w"> </span><span class="mi">7</span><span class="p" data-group-id="1785943044-11">]</span><span class="p" data-group-id="1785943044-6">]</span></code></pre> </section> </div> <div class="detail" id="chunk_every/2"> <div class="detail-header"> <a href="#chunk_every/2" class="detail-link" title="Link to this function"> <span class="icon-link" aria-hidden="true"></span> <span class="sr-only">Link to this function</span> </a> <span class="signature">chunk_every(enum, count)</span> <a href="https://github.com/elixir-lang/elixir/blob/v1.7.2/lib/elixir/lib/stream.ex#L150" class="view-source" rel="help" title="View Source"> <span class="icon-code" aria-hidden="true"></span> <span class="sr-only">View Source</span> </a> <span class="note">(since 1.5.0)</span> <div class="specs"> <pre>chunk_every(<a href="Enumerable.html#t:t/0">Enumerable.t</a>(), <a href="typespecs.html#basic-types">pos_integer</a>()) :: <a href="Enumerable.html#t:t/0">Enumerable.t</a>()</pre> </div> </div> <section class="docstring"> <p>Shortcut to <code class="inline">chunk_every(enum, count, count)</code>.</p> </section> </div> <div class="detail" id="chunk_every/4"> <span id="chunk_every/3"></span> <div class="detail-header"> <a href="#chunk_every/4" class="detail-link" title="Link to this function"> <span class="icon-link" aria-hidden="true"></span> <span class="sr-only">Link to this function</span> </a> <span class="signature">chunk_every(enum, count, step, leftover \\ [])</span> <a href="https://github.com/elixir-lang/elixir/blob/v1.7.2/lib/elixir/lib/stream.ex#L185" class="view-source" rel="help" title="View Source"> <span class="icon-code" aria-hidden="true"></span> <span class="sr-only">View Source</span> </a> <span class="note">(since 1.5.0)</span> <div class="specs"> <pre>chunk_every( <a href="Enumerable.html#t:t/0">Enumerable.t</a>(), <a href="typespecs.html#basic-types">pos_integer</a>(), <a href="typespecs.html#basic-types">pos_integer</a>(), <a href="Enumerable.html#t:t/0">Enumerable.t</a>() | :discard ) :: <a href="Enumerable.html#t:t/0">Enumerable.t</a>()</pre> </div> </div> <section class="docstring"> <p>Streams the enumerable in chunks, containing <code class="inline">count</code> items each, where each new chunk starts <code class="inline">step</code> elements into the enumerable.</p> <p><code class="inline">step</code> is optional and, if not passed, defaults to <code class="inline">count</code>, i.e. chunks do not overlap.</p> <p>If the last chunk does not have <code class="inline">count</code> elements to fill the chunk, elements are taken from <code class="inline">leftover</code> to fill in the chunk. If <code class="inline">leftover</code> does not have enough elements to fill the chunk, then a partial chunk is returned with less than <code class="inline">count</code> elements.</p> <p>If <code class="inline">:discard</code> is given in <code class="inline">leftover</code>, the last chunk is discarded unless it has exactly <code class="inline">count</code> elements.</p> <h2 id="chunk_every/4-examples" class="section-heading"> <a href="#chunk_every/4-examples" class="hover-link"><span class="icon-link" aria-hidden="true"></span></a> Examples </h2> <pre><code class="nohighlight makeup elixir"><span class="gp unselectable">iex> </span><span class="nc">Stream</span><span class="o">.</span><span class="n">chunk_every</span><span class="p" data-group-id="8168796796-1">(</span><span class="p" data-group-id="8168796796-2">[</span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="mi">2</span><span class="p">,</span><span class="w"> </span><span class="mi">3</span><span class="p">,</span><span class="w"> </span><span class="mi">4</span><span class="p">,</span><span class="w"> </span><span class="mi">5</span><span class="p">,</span><span class="w"> </span><span class="mi">6</span><span class="p" data-group-id="8168796796-2">]</span><span class="p">,</span><span class="w"> </span><span class="mi">2</span><span class="p" data-group-id="8168796796-1">)</span><span class="w"> </span><span class="o">|></span><span class="w"> </span><span class="nc">Enum</span><span class="o">.</span><span class="n">to_list</span><span class="p" data-group-id="8168796796-3">(</span><span class="p" data-group-id="8168796796-3">)</span><span class="w"> </span><span class="p" data-group-id="8168796796-4">[</span><span class="p" data-group-id="8168796796-5">[</span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="mi">2</span><span class="p" data-group-id="8168796796-5">]</span><span class="p">,</span><span class="w"> </span><span class="p" data-group-id="8168796796-6">[</span><span class="mi">3</span><span class="p">,</span><span class="w"> </span><span class="mi">4</span><span class="p" data-group-id="8168796796-6">]</span><span class="p">,</span><span class="w"> </span><span class="p" data-group-id="8168796796-7">[</span><span class="mi">5</span><span class="p">,</span><span class="w"> </span><span class="mi">6</span><span class="p" data-group-id="8168796796-7">]</span><span class="p" data-group-id="8168796796-4">]</span><span class="w"> </span><span class="gp unselectable">iex> </span><span class="nc">Stream</span><span class="o">.</span><span class="n">chunk_every</span><span class="p" data-group-id="8168796796-8">(</span><span class="p" data-group-id="8168796796-9">[</span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="mi">2</span><span class="p">,</span><span class="w"> </span><span class="mi">3</span><span class="p">,</span><span class="w"> </span><span class="mi">4</span><span class="p">,</span><span class="w"> </span><span class="mi">5</span><span class="p">,</span><span class="w"> </span><span class="mi">6</span><span class="p" data-group-id="8168796796-9">]</span><span class="p">,</span><span class="w"> </span><span class="mi">3</span><span class="p">,</span><span class="w"> </span><span class="mi">2</span><span class="p">,</span><span class="w"> </span><span class="ss">:discard</span><span class="p" data-group-id="8168796796-8">)</span><span class="w"> </span><span class="o">|></span><span class="w"> </span><span class="nc">Enum</span><span class="o">.</span><span class="n">to_list</span><span class="p" data-group-id="8168796796-10">(</span><span class="p" data-group-id="8168796796-10">)</span><span class="w"> </span><span class="p" data-group-id="8168796796-11">[</span><span class="p" data-group-id="8168796796-12">[</span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="mi">2</span><span class="p">,</span><span class="w"> </span><span class="mi">3</span><span class="p" data-group-id="8168796796-12">]</span><span class="p">,</span><span class="w"> </span><span class="p" data-group-id="8168796796-13">[</span><span class="mi">3</span><span class="p">,</span><span class="w"> </span><span class="mi">4</span><span class="p">,</span><span class="w"> </span><span class="mi">5</span><span class="p" data-group-id="8168796796-13">]</span><span class="p" data-group-id="8168796796-11">]</span><span class="w"> </span><span class="gp unselectable">iex> </span><span class="nc">Stream</span><span class="o">.</span><span class="n">chunk_every</span><span class="p" data-group-id="8168796796-14">(</span><span class="p" data-group-id="8168796796-15">[</span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="mi">2</span><span class="p">,</span><span class="w"> </span><span class="mi">3</span><span class="p">,</span><span class="w"> </span><span class="mi">4</span><span class="p">,</span><span class="w"> </span><span class="mi">5</span><span class="p">,</span><span class="w"> </span><span class="mi">6</span><span class="p" data-group-id="8168796796-15">]</span><span class="p">,</span><span class="w"> </span><span class="mi">3</span><span class="p">,</span><span class="w"> </span><span class="mi">2</span><span class="p">,</span><span class="w"> </span><span class="p" data-group-id="8168796796-16">[</span><span class="mi">7</span><span class="p" data-group-id="8168796796-16">]</span><span class="p" data-group-id="8168796796-14">)</span><span class="w"> </span><span class="o">|></span><span class="w"> </span><span class="nc">Enum</span><span class="o">.</span><span class="n">to_list</span><span class="p" data-group-id="8168796796-17">(</span><span class="p" data-group-id="8168796796-17">)</span><span class="w"> </span><span class="p" data-group-id="8168796796-18">[</span><span class="p" data-group-id="8168796796-19">[</span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="mi">2</span><span class="p">,</span><span class="w"> </span><span class="mi">3</span><span class="p" data-group-id="8168796796-19">]</span><span class="p">,</span><span class="w"> </span><span class="p" data-group-id="8168796796-20">[</span><span class="mi">3</span><span class="p">,</span><span class="w"> </span><span class="mi">4</span><span class="p">,</span><span class="w"> </span><span class="mi">5</span><span class="p" data-group-id="8168796796-20">]</span><span class="p">,</span><span class="w"> </span><span class="p" data-group-id="8168796796-21">[</span><span class="mi">5</span><span class="p">,</span><span class="w"> </span><span class="mi">6</span><span class="p">,</span><span class="w"> </span><span class="mi">7</span><span class="p" data-group-id="8168796796-21">]</span><span class="p" data-group-id="8168796796-18">]</span><span class="w"> </span><span class="gp unselectable">iex> </span><span class="nc">Stream</span><span class="o">.</span><span class="n">chunk_every</span><span class="p" data-group-id="8168796796-22">(</span><span class="p" data-group-id="8168796796-23">[</span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="mi">2</span><span class="p">,</span><span class="w"> </span><span class="mi">3</span><span class="p">,</span><span class="w"> </span><span class="mi">4</span><span class="p">,</span><span class="w"> </span><span class="mi">5</span><span class="p">,</span><span class="w"> </span><span class="mi">6</span><span class="p" data-group-id="8168796796-23">]</span><span class="p">,</span><span class="w"> </span><span class="mi">3</span><span class="p">,</span><span class="w"> </span><span class="mi">3</span><span class="p">,</span><span class="w"> </span><span class="p" data-group-id="8168796796-24">[</span><span class="p" data-group-id="8168796796-24">]</span><span class="p" data-group-id="8168796796-22">)</span><span class="w"> </span><span class="o">|></span><span class="w"> </span><span class="nc">Enum</span><span class="o">.</span><span class="n">to_list</span><span class="p" data-group-id="8168796796-25">(</span><span class="p" data-group-id="8168796796-25">)</span><span class="w"> </span><span class="p" data-group-id="8168796796-26">[</span><span class="p" data-group-id="8168796796-27">[</span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="mi">2</span><span class="p">,</span><span class="w"> </span><span class="mi">3</span><span class="p" data-group-id="8168796796-27">]</span><span class="p">,</span><span class="w"> </span><span class="p" data-group-id="8168796796-28">[</span><span class="mi">4</span><span class="p">,</span><span class="w"> </span><span class="mi">5</span><span class="p">,</span><span class="w"> </span><span class="mi">6</span><span class="p" data-group-id="8168796796-28">]</span><span class="p" data-group-id="8168796796-26">]</span></code></pre> </section> </div> <div class="detail" id="chunk_while/4"> <div class="detail-header"> <a href="#chunk_while/4" class="detail-link" title="Link to this function"> <span class="icon-link" aria-hidden="true"></span> <span class="sr-only">Link to this function</span> </a> <span class="signature">chunk_while(enum, acc, chunk_fun, after_fun)</span> <a href="https://github.com/elixir-lang/elixir/blob/v1.7.2/lib/elixir/lib/stream.ex#L244" class="view-source" rel="help" title="View Source"> <span class="icon-code" aria-hidden="true"></span> <span class="sr-only">View Source</span> </a> <span class="note">(since 1.5.0)</span> <div class="specs"> <pre>chunk_while( <a href="Enumerable.html#t:t/0">Enumerable.t</a>(), <a href="#t:acc/0">acc</a>(), (<a href="#t:element/0">element</a>(), <a href="#t:acc/0">acc</a>() -> {:cont, chunk, <a href="#t:acc/0">acc</a>()} | {:cont, <a href="#t:acc/0">acc</a>()} | {:halt, <a href="#t:acc/0">acc</a>()}), (<a href="#t:acc/0">acc</a>() -> {:cont, chunk, <a href="#t:acc/0">acc</a>()} | {:cont, <a href="#t:acc/0">acc</a>()}) ) :: <a href="Enumerable.html#t:t/0">Enumerable.t</a>() when chunk: <a href="typespecs.html#basic-types">any</a>()</pre> </div> </div> <section class="docstring"> <p>Chunks the <code class="inline">enum</code> with fine grained control when every chunk is emitted.</p> <p><code class="inline">chunk_fun</code> receives the current element and the accumulator and must return <code class="inline">{:cont, element, acc}</code> to emit the given chunk and continue with accumulator or <code class="inline">{:cont, acc}</code> to not emit any chunk and continue with the return accumulator.</p> <p><code class="inline">after_fun</code> is invoked when iteration is done and must also return <code class="inline">{:cont, element, acc}</code> or <code class="inline">{:cont, acc}</code>.</p> <h2 id="chunk_while/4-examples" class="section-heading"> <a href="#chunk_while/4-examples" class="hover-link"><span class="icon-link" aria-hidden="true"></span></a> Examples </h2> <pre><code class="nohighlight makeup elixir"><span class="gp unselectable">iex> </span><span class="n">chunk_fun</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k" data-group-id="7422488924-1">fn</span><span class="w"> </span><span class="n">item</span><span class="p">,</span><span class="w"> </span><span class="n">acc</span><span class="w"> </span><span class="o">-></span><span class="w"> </span><span class="gp unselectable">...> </span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">rem</span><span class="p" data-group-id="7422488924-2">(</span><span class="n">item</span><span class="p">,</span><span class="w"> </span><span class="mi">2</span><span class="p" data-group-id="7422488924-2">)</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="mi">0</span><span class="w"> </span><span class="k" data-group-id="7422488924-3">do</span><span class="w"> </span><span class="gp unselectable">...> </span><span class="w"> </span><span class="p" data-group-id="7422488924-4">{</span><span class="ss">:cont</span><span class="p">,</span><span class="w"> </span><span class="nc">Enum</span><span class="o">.</span><span class="n">reverse</span><span class="p" data-group-id="7422488924-5">(</span><span class="p" data-group-id="7422488924-6">[</span><span class="n">item</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">acc</span><span class="p" data-group-id="7422488924-6">]</span><span class="p" data-group-id="7422488924-5">)</span><span class="p">,</span><span class="w"> </span><span class="p" data-group-id="7422488924-7">[</span><span class="p" data-group-id="7422488924-7">]</span><span class="p" data-group-id="7422488924-4">}</span><span class="w"> </span><span class="gp unselectable">...> </span><span class="w"> </span><span class="k" data-group-id="7422488924-3">else</span><span class="w"> </span><span class="gp unselectable">...> </span><span class="w"> </span><span class="p" data-group-id="7422488924-8">{</span><span class="ss">:cont</span><span class="p">,</span><span class="w"> </span><span class="p" data-group-id="7422488924-9">[</span><span class="n">item</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">acc</span><span class="p" data-group-id="7422488924-9">]</span><span class="p" data-group-id="7422488924-8">}</span><span class="w"> </span><span class="gp unselectable">...> </span><span class="w"> </span><span class="k" data-group-id="7422488924-3">end</span><span class="w"> </span><span class="gp unselectable">...> </span><span class="k" data-group-id="7422488924-1">end</span><span class="w"> </span><span class="gp unselectable">iex> </span><span class="n">after_fun</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k" data-group-id="7422488924-10">fn</span><span class="w"> </span><span class="gp unselectable">...> </span><span class="w"> </span><span class="p" data-group-id="7422488924-11">[</span><span class="p" data-group-id="7422488924-11">]</span><span class="w"> </span><span class="o">-></span><span class="w"> </span><span class="p" data-group-id="7422488924-12">{</span><span class="ss">:cont</span><span class="p">,</span><span class="w"> </span><span class="p" data-group-id="7422488924-13">[</span><span class="p" data-group-id="7422488924-13">]</span><span class="p" data-group-id="7422488924-12">}</span><span class="w"> </span><span class="gp unselectable">...> </span><span class="w"> </span><span class="n">acc</span><span class="w"> </span><span class="o">-></span><span class="w"> </span><span class="p" data-group-id="7422488924-14">{</span><span class="ss">:cont</span><span class="p">,</span><span class="w"> </span><span class="nc">Enum</span><span class="o">.</span><span class="n">reverse</span><span class="p" data-group-id="7422488924-15">(</span><span class="n">acc</span><span class="p" data-group-id="7422488924-15">)</span><span class="p">,</span><span class="w"> </span><span class="p" data-group-id="7422488924-16">[</span><span class="p" data-group-id="7422488924-16">]</span><span class="p" data-group-id="7422488924-14">}</span><span class="w"> </span><span class="gp unselectable">...> </span><span class="k" data-group-id="7422488924-10">end</span><span class="w"> </span><span class="gp unselectable">iex> </span><span class="n">stream</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nc">Stream</span><span class="o">.</span><span class="n">chunk_while</span><span class="p" data-group-id="7422488924-17">(</span><span class="mi">1</span><span class="o">.</span><span class="o">.</span><span class="mi">10</span><span class="p">,</span><span class="w"> </span><span class="p" data-group-id="7422488924-18">[</span><span class="p" data-group-id="7422488924-18">]</span><span class="p">,</span><span class="w"> </span><span class="n">chunk_fun</span><span class="p">,</span><span class="w"> </span><span class="n">after_fun</span><span class="p" data-group-id="7422488924-17">)</span><span class="w"> </span><span class="gp unselectable">iex> </span><span class="nc">Enum</span><span class="o">.</span><span class="n">to_list</span><span class="p" data-group-id="7422488924-19">(</span><span class="n">stream</span><span class="p" data-group-id="7422488924-19">)</span><span class="w"> </span><span class="p" data-group-id="7422488924-20">[</span><span class="p" data-group-id="7422488924-21">[</span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="mi">2</span><span class="p" data-group-id="7422488924-21">]</span><span class="p">,</span><span class="w"> </span><span class="p" data-group-id="7422488924-22">[</span><span class="mi">3</span><span class="p">,</span><span class="w"> </span><span class="mi">4</span><span class="p" data-group-id="7422488924-22">]</span><span class="p">,</span><span class="w"> </span><span class="p" data-group-id="7422488924-23">[</span><span class="mi">5</span><span class="p">,</span><span class="w"> </span><span class="mi">6</span><span class="p" data-group-id="7422488924-23">]</span><span class="p">,</span><span class="w"> </span><span class="p" data-group-id="7422488924-24">[</span><span class="mi">7</span><span class="p">,</span><span class="w"> </span><span class="mi">8</span><span class="p" data-group-id="7422488924-24">]</span><span class="p">,</span><span class="w"> </span><span class="p" data-group-id="7422488924-25">[</span><span class="mi">9</span><span class="p">,</span><span class="w"> </span><span class="mi">10</span><span class="p" data-group-id="7422488924-25">]</span><span class="p" data-group-id="7422488924-20">]</span></code></pre> </section> </div> <div class="detail" id="concat/1"> <div class="detail-header"> <a href="#concat/1" class="detail-link" title="Link to this function"> <span class="icon-link" aria-hidden="true"></span> <span class="sr-only">Link to this function</span> </a> <span class="signature">concat(enumerables)</span> <a href="https://github.com/elixir-lang/elixir/blob/v1.7.2/lib/elixir/lib/stream.ex#L1060" class="view-source" rel="help" title="View Source"> <span class="icon-code" aria-hidden="true"></span> <span class="sr-only">View Source</span> </a> <div class="specs"> <pre>concat(<a href="Enumerable.html#t:t/0">Enumerable.t</a>()) :: <a href="Enumerable.html#t:t/0">Enumerable.t</a>()</pre> </div> </div> <section class="docstring"> <p>Creates a stream that enumerates each enumerable in an enumerable.</p> <h2 id="concat/1-examples" class="section-heading"> <a href="#concat/1-examples" class="hover-link"><span class="icon-link" aria-hidden="true"></span></a> Examples </h2> <pre><code class="nohighlight makeup elixir"><span class="gp unselectable">iex> </span><span class="n">stream</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nc">Stream</span><span class="o">.</span><span class="n">concat</span><span class="p" data-group-id="8996640575-1">(</span><span class="p" data-group-id="8996640575-2">[</span><span class="mi">1</span><span class="o">.</span><span class="o">.</span><span class="mi">3</span><span class="p">,</span><span class="w"> </span><span class="mi">4</span><span class="o">.</span><span class="o">.</span><span class="mi">6</span><span class="p">,</span><span class="w"> </span><span class="mi">7</span><span class="o">.</span><span class="o">.</span><span class="mi">9</span><span class="p" data-group-id="8996640575-2">]</span><span class="p" data-group-id="8996640575-1">)</span><span class="w"> </span><span class="gp unselectable">iex> </span><span class="nc">Enum</span><span class="o">.</span><span class="n">to_list</span><span class="p" data-group-id="8996640575-3">(</span><span class="n">stream</span><span class="p" data-group-id="8996640575-3">)</span><span class="w"> </span><span class="p" data-group-id="8996640575-4">[</span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="mi">2</span><span class="p">,</span><span class="w"> </span><span class="mi">3</span><span class="p">,</span><span class="w"> </span><span class="mi">4</span><span class="p">,</span><span class="w"> </span><span class="mi">5</span><span class="p">,</span><span class="w"> </span><span class="mi">6</span><span class="p">,</span><span class="w"> </span><span class="mi">7</span><span class="p">,</span><span class="w"> </span><span class="mi">8</span><span class="p">,</span><span class="w"> </span><span class="mi">9</span><span class="p" data-group-id="8996640575-4">]</span></code></pre> </section> </div> <div class="detail" id="concat/2"> <div class="detail-header"> <a href="#concat/2" class="detail-link" title="Link to this function"> <span class="icon-link" aria-hidden="true"></span> <span class="sr-only">Link to this function</span> </a> <span class="signature">concat(first, second)</span> <a href="https://github.com/elixir-lang/elixir/blob/v1.7.2/lib/elixir/lib/stream.ex#L1081" class="view-source" rel="help" title="View Source"> <span class="icon-code" aria-hidden="true"></span> <span class="sr-only">View Source</span> </a> <div class="specs"> <pre>concat(<a href="Enumerable.html#t:t/0">Enumerable.t</a>(), <a href="Enumerable.html#t:t/0">Enumerable.t</a>()) :: <a href="Enumerable.html#t:t/0">Enumerable.t</a>()</pre> </div> </div> <section class="docstring"> <p>Creates a stream that enumerates the first argument, followed by the second.</p> <h2 id="concat/2-examples" class="section-heading"> <a href="#concat/2-examples" class="hover-link"><span class="icon-link" aria-hidden="true"></span></a> Examples </h2> <pre><code class="nohighlight makeup elixir"><span class="gp unselectable">iex> </span><span class="n">stream</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nc">Stream</span><span class="o">.</span><span class="n">concat</span><span class="p" data-group-id="7617204718-1">(</span><span class="mi">1</span><span class="o">.</span><span class="o">.</span><span class="mi">3</span><span class="p">,</span><span class="w"> </span><span class="mi">4</span><span class="o">.</span><span class="o">.</span><span class="mi">6</span><span class="p" data-group-id="7617204718-1">)</span><span class="w"> </span><span class="gp unselectable">iex> </span><span class="nc">Enum</span><span class="o">.</span><span class="n">to_list</span><span class="p" data-group-id="7617204718-2">(</span><span class="n">stream</span><span class="p" data-group-id="7617204718-2">)</span><span class="w"> </span><span class="p" data-group-id="7617204718-3">[</span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="mi">2</span><span class="p">,</span><span class="w"> </span><span class="mi">3</span><span class="p">,</span><span class="w"> </span><span class="mi">4</span><span class="p">,</span><span class="w"> </span><span class="mi">5</span><span class="p">,</span><span class="w"> </span><span class="mi">6</span><span class="p" data-group-id="7617204718-3">]</span><span class="w"> </span><span class="gp unselectable">iex> </span><span class="n">stream1</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nc">Stream</span><span class="o">.</span><span class="n">cycle</span><span class="p" data-group-id="7617204718-4">(</span><span class="p" data-group-id="7617204718-5">[</span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="mi">2</span><span class="p">,</span><span class="w"> </span><span class="mi">3</span><span class="p" data-group-id="7617204718-5">]</span><span class="p" data-group-id="7617204718-4">)</span><span class="w"> </span><span class="gp unselectable">iex> </span><span class="n">stream2</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nc">Stream</span><span class="o">.</span><span class="n">cycle</span><span class="p" data-group-id="7617204718-6">(</span><span class="p" data-group-id="7617204718-7">[</span><span class="mi">4</span><span class="p">,</span><span class="w"> </span><span class="mi">5</span><span class="p">,</span><span class="w"> </span><span class="mi">6</span><span class="p" data-group-id="7617204718-7">]</span><span class="p" data-group-id="7617204718-6">)</span><span class="w"> </span><span class="gp unselectable">iex> </span><span class="n">stream</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nc">Stream</span><span class="o">.</span><span class="n">concat</span><span class="p" data-group-id="7617204718-8">(</span><span class="n">stream1</span><span class="p">,</span><span class="w"> </span><span class="n">stream2</span><span class="p" data-group-id="7617204718-8">)</span><span class="w"> </span><span class="gp unselectable">iex> </span><span class="nc">Enum</span><span class="o">.</span><span class="n">take</span><span class="p" data-group-id="7617204718-9">(</span><span class="n">stream</span><span class="p">,</span><span class="w"> </span><span class="mi">6</span><span class="p" data-group-id="7617204718-9">)</span><span class="w"> </span><span class="p" data-group-id="7617204718-10">[</span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="mi">2</span><span class="p">,</span><span class="w"> </span><span class="mi">3</span><span class="p">,</span><span class="w"> </span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="mi">2</span><span class="p">,</span><span class="w"> </span><span class="mi">3</span><span class="p" data-group-id="7617204718-10">]</span></code></pre> </section> </div> <div class="detail" id="cycle/1"> <div class="detail-header"> <a href="#cycle/1" class="detail-link" title="Link to this function"> <span class="icon-link" aria-hidden="true"></span> <span class="sr-only">Link to this function</span> </a> <span class="signature">cycle(enumerable)</span> <a href="https://github.com/elixir-lang/elixir/blob/v1.7.2/lib/elixir/lib/stream.ex#L1240" class="view-source" rel="help" title="View Source"> <span class="icon-code" aria-hidden="true"></span> <span class="sr-only">View Source</span> </a> <div class="specs"> <pre>cycle(<a href="Enumerable.html#t:t/0">Enumerable.t</a>()) :: <a href="Enumerable.html#t:t/0">Enumerable.t</a>()</pre> </div> </div> <section class="docstring"> <p>Creates a stream that cycles through the given enumerable, infinitely.</p> <h2 id="cycle/1-examples" class="section-heading"> <a href="#cycle/1-examples" class="hover-link"><span class="icon-link" aria-hidden="true"></span></a> Examples </h2> <pre><code class="nohighlight makeup elixir"><span class="gp unselectable">iex> </span><span class="n">stream</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nc">Stream</span><span class="o">.</span><span class="n">cycle</span><span class="p" data-group-id="4593832772-1">(</span><span class="p" data-group-id="4593832772-2">[</span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="mi">2</span><span class="p">,</span><span class="w"> </span><span class="mi">3</span><span class="p" data-group-id="4593832772-2">]</span><span class="p" data-group-id="4593832772-1">)</span><span class="w"> </span><span class="gp unselectable">iex> </span><span class="nc">Enum</span><span class="o">.</span><span class="n">take</span><span class="p" data-group-id="4593832772-3">(</span><span class="n">stream</span><span class="p">,</span><span class="w"> </span><span class="mi">5</span><span class="p" data-group-id="4593832772-3">)</span><span class="w"> </span><span class="p" data-group-id="4593832772-4">[</span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="mi">2</span><span class="p">,</span><span class="w"> </span><span class="mi">3</span><span class="p">,</span><span class="w"> </span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="mi">2</span><span class="p" data-group-id="4593832772-4">]</span></code></pre> </section> </div> <div class="detail" id="dedup/1"> <div class="detail-header"> <a href="#dedup/1" class="detail-link" title="Link to this function"> <span class="icon-link" aria-hidden="true"></span> <span class="sr-only">Link to this function</span> </a> <span class="signature">dedup(enum)</span> <a href="https://github.com/elixir-lang/elixir/blob/v1.7.2/lib/elixir/lib/stream.ex#L295" class="view-source" rel="help" title="View Source"> <span class="icon-code" aria-hidden="true"></span> <span class="sr-only">View Source</span> </a> <div class="specs"> <pre>dedup(<a href="Enumerable.html#t:t/0">Enumerable.t</a>()) :: <a href="Enumerable.html#t:t/0">Enumerable.t</a>()</pre> </div> </div> <section class="docstring"> <p>Creates a stream that only emits elements if they are different from the last emitted element.</p> <p>This function only ever needs to store the last emitted element.</p> <p>Elements are compared using <a href="Kernel.html#===/2"><code class="inline">===/2</code></a>.</p> <h2 id="dedup/1-examples" class="section-heading"> <a href="#dedup/1-examples" class="hover-link"><span class="icon-link" aria-hidden="true"></span></a> Examples </h2> <pre><code class="nohighlight makeup elixir"><span class="gp unselectable">iex> </span><span class="nc">Stream</span><span class="o">.</span><span class="n">dedup</span><span class="p" data-group-id="6847230660-1">(</span><span class="p" data-group-id="6847230660-2">[</span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="mi">2</span><span class="p">,</span><span class="w"> </span><span class="mi">3</span><span class="p">,</span><span class="w"> </span><span class="mi">3</span><span class="p">,</span><span class="w"> </span><span class="mi">2</span><span class="p">,</span><span class="w"> </span><span class="mi">1</span><span class="p" data-group-id="6847230660-2">]</span><span class="p" data-group-id="6847230660-1">)</span><span class="w"> </span><span class="o">|></span><span class="w"> </span><span class="nc">Enum</span><span class="o">.</span><span class="n">to_list</span><span class="p" data-group-id="6847230660-3">(</span><span class="p" data-group-id="6847230660-3">)</span><span class="w"> </span><span class="p" data-group-id="6847230660-4">[</span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="mi">2</span><span class="p">,</span><span class="w"> </span><span class="mi">3</span><span class="p">,</span><span class="w"> </span><span class="mi">2</span><span class="p">,</span><span class="w"> </span><span class="mi">1</span><span class="p" data-group-id="6847230660-4">]</span></code></pre> </section> </div> <div class="detail" id="dedup_by/2"> <div class="detail-header"> <a href="#dedup_by/2" class="detail-link" title="Link to this function"> <span class="icon-link" aria-hidden="true"></span> <span class="sr-only">Link to this function</span> </a> <span class="signature">dedup_by(enum, fun)</span> <a href="https://github.com/elixir-lang/elixir/blob/v1.7.2/lib/elixir/lib/stream.ex#L310" class="view-source" rel="help" title="View Source"> <span class="icon-code" aria-hidden="true"></span> <span class="sr-only">View Source</span> </a> <div class="specs"> <pre>dedup_by(<a href="Enumerable.html#t:t/0">Enumerable.t</a>(), (<a href="#t:element/0">element</a>() -> <a href="typespecs.html#built-in-types">term</a>())) :: <a href="Enumerable.html#t:t/0">Enumerable.t</a>()</pre> </div> </div> <section class="docstring"> <p>Creates a stream that only emits elements if the result of calling <code class="inline">fun</code> on the element is different from the (stored) result of calling <code class="inline">fun</code> on the last emitted element.</p> <h2 id="dedup_by/2-examples" class="section-heading"> <a href="#dedup_by/2-examples" class="hover-link"><span class="icon-link" aria-hidden="true"></span></a> Examples </h2> <pre><code class="nohighlight makeup elixir"><span class="gp unselectable">iex> </span><span class="nc">Stream</span><span class="o">.</span><span class="n">dedup_by</span><span class="p" data-group-id="7419347116-1">(</span><span class="p" data-group-id="7419347116-2">[</span><span class="p" data-group-id="7419347116-3">{</span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="ss">:x</span><span class="p" data-group-id="7419347116-3">}</span><span class="p">,</span><span class="w"> </span><span class="p" data-group-id="7419347116-4">{</span><span class="mi">2</span><span class="p">,</span><span class="w"> </span><span class="ss">:y</span><span class="p" data-group-id="7419347116-4">}</span><span class="p">,</span><span class="w"> </span><span class="p" data-group-id="7419347116-5">{</span><span class="mi">2</span><span class="p">,</span><span class="w"> </span><span class="ss">:z</span><span class="p" data-group-id="7419347116-5">}</span><span class="p">,</span><span class="w"> </span><span class="p" data-group-id="7419347116-6">{</span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="ss">:x</span><span class="p" data-group-id="7419347116-6">}</span><span class="p" data-group-id="7419347116-2">]</span><span class="p">,</span><span class="w"> </span><span class="k" data-group-id="7419347116-7">fn</span><span class="w"> </span><span class="p" data-group-id="7419347116-8">{</span><span class="n">x</span><span class="p">,</span><span class="w"> </span><span class="bp">_</span><span class="p" data-group-id="7419347116-8">}</span><span class="w"> </span><span class="o">-></span><span class="w"> </span><span class="n">x</span><span class="w"> </span><span class="k" data-group-id="7419347116-7">end</span><span class="p" data-group-id="7419347116-1">)</span><span class="w"> </span><span class="o">|></span><span class="w"> </span><span class="nc">Enum</span><span class="o">.</span><span class="n">to_list</span><span class="p" data-group-id="7419347116-9">(</span><span class="p" data-group-id="7419347116-9">)</span><span class="w"> </span><span class="p" data-group-id="7419347116-10">[</span><span class="p" data-group-id="7419347116-11">{</span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="ss">:x</span><span class="p" data-group-id="7419347116-11">}</span><span class="p">,</span><span class="w"> </span><span class="p" data-group-id="7419347116-12">{</span><span class="mi">2</span><span class="p">,</span><span class="w"> </span><span class="ss">:y</span><span class="p" data-group-id="7419347116-12">}</span><span class="p">,</span><span class="w"> </span><span class="p" data-group-id="7419347116-13">{</span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="ss">:x</span><span class="p" data-group-id="7419347116-13">}</span><span class="p" data-group-id="7419347116-10">]</span></code></pre> </section> </div> <div class="detail" id="drop/2"> <div class="detail-header"> <a href="#drop/2" class="detail-link" title="Link to this function"> <span class="icon-link" aria-hidden="true"></span> <span class="sr-only">Link to this function</span> </a> <span class="signature">drop(enum, n)</span> <a href="https://github.com/elixir-lang/elixir/blob/v1.7.2/lib/elixir/lib/stream.ex#L338" class="view-source" rel="help" title="View Source"> <span class="icon-code" aria-hidden="true"></span> <span class="sr-only">View Source</span> </a> <div class="specs"> <pre>drop(<a href="Enumerable.html#t:t/0">Enumerable.t</a>(), <a href="typespecs.html#basic-types">non_neg_integer</a>()) :: <a href="Enumerable.html#t:t/0">Enumerable.t</a>()</pre> </div> </div> <section class="docstring"> <p>Lazily drops the next <code class="inline">n</code> items from the enumerable.</p> <p>If a negative <code class="inline">n</code> is given, it will drop the last <code class="inline">n</code> items from the collection. Note that the mechanism by which this is implemented will delay the emission of any item until <code class="inline">n</code> additional items have been emitted by the enum.</p> <h2 id="drop/2-examples" class="section-heading"> <a href="#drop/2-examples" class="hover-link"><span class="icon-link" aria-hidden="true"></span></a> Examples </h2> <pre><code class="nohighlight makeup elixir"><span class="gp unselectable">iex> </span><span class="n">stream</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nc">Stream</span><span class="o">.</span><span class="n">drop</span><span class="p" data-group-id="9785101298-1">(</span><span class="mi">1</span><span class="o">.</span><span class="o">.</span><span class="mi">10</span><span class="p">,</span><span class="w"> </span><span class="mi">5</span><span class="p" data-group-id="9785101298-1">)</span><span class="w"> </span><span class="gp unselectable">iex> </span><span class="nc">Enum</span><span class="o">.</span><span class="n">to_list</span><span class="p" data-group-id="9785101298-2">(</span><span class="n">stream</span><span class="p" data-group-id="9785101298-2">)</span><span class="w"> </span><span class="p" data-group-id="9785101298-3">[</span><span class="mi">6</span><span class="p">,</span><span class="w"> </span><span class="mi">7</span><span class="p">,</span><span class="w"> </span><span class="mi">8</span><span class="p">,</span><span class="w"> </span><span class="mi">9</span><span class="p">,</span><span class="w"> </span><span class="mi">10</span><span class="p" data-group-id="9785101298-3">]</span><span class="w"> </span><span class="gp unselectable">iex> </span><span class="n">stream</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nc">Stream</span><span class="o">.</span><span class="n">drop</span><span class="p" data-group-id="9785101298-4">(</span><span class="mi">1</span><span class="o">.</span><span class="o">.</span><span class="mi">10</span><span class="p">,</span><span class="w"> </span><span class="o">-</span><span class="mi">5</span><span class="p" data-group-id="9785101298-4">)</span><span class="w"> </span><span class="gp unselectable">iex> </span><span class="nc">Enum</span><span class="o">.</span><span class="n">to_list</span><span class="p" data-group-id="9785101298-5">(</span><span class="n">stream</span><span class="p" data-group-id="9785101298-5">)</span><span class="w"> </span><span class="p" data-group-id="9785101298-6">[</span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="mi">2</span><span class="p">,</span><span class="w"> </span><span class="mi">3</span><span class="p">,</span><span class="w"> </span><span class="mi">4</span><span class="p">,</span><span class="w"> </span><span class="mi">5</span><span class="p" data-group-id="9785101298-6">]</span></code></pre> </section> </div> <div class="detail" id="drop_every/2"> <div class="detail-header"> <a href="#drop_every/2" class="detail-link" title="Link to this function"> <span class="icon-link" aria-hidden="true"></span> <span class="sr-only">Link to this function</span> </a> <span class="signature">drop_every(enum, nth)</span> <a href="https://github.com/elixir-lang/elixir/blob/v1.7.2/lib/elixir/lib/stream.ex#L391" class="view-source" rel="help" title="View Source"> <span class="icon-code" aria-hidden="true"></span> <span class="sr-only">View Source</span> </a> <div class="specs"> <pre>drop_every(<a href="Enumerable.html#t:t/0">Enumerable.t</a>(), <a href="typespecs.html#basic-types">non_neg_integer</a>()) :: <a href="Enumerable.html#t:t/0">Enumerable.t</a>()</pre> </div> </div> <section class="docstring"> <p>Creates a stream that drops every <code class="inline">nth</code> item from the enumerable.</p> <p>The first item is always dropped, unless <code class="inline">nth</code> is 0.</p> <p><code class="inline">nth</code> must be a non-negative integer.</p> <h2 id="drop_every/2-examples" class="section-heading"> <a href="#drop_every/2-examples" class="hover-link"><span class="icon-link" aria-hidden="true"></span></a> Examples </h2> <pre><code class="nohighlight makeup elixir"><span class="gp unselectable">iex> </span><span class="n">stream</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nc">Stream</span><span class="o">.</span><span class="n">drop_every</span><span class="p" data-group-id="2745510598-1">(</span><span class="mi">1</span><span class="o">.</span><span class="o">.</span><span class="mi">10</span><span class="p">,</span><span class="w"> </span><span class="mi">2</span><span class="p" data-group-id="2745510598-1">)</span><span class="w"> </span><span class="gp unselectable">iex> </span><span class="nc">Enum</span><span class="o">.</span><span class="n">to_list</span><span class="p" data-group-id="2745510598-2">(</span><span class="n">stream</span><span class="p" data-group-id="2745510598-2">)</span><span class="w"> </span><span class="p" data-group-id="2745510598-3">[</span><span class="mi">2</span><span class="p">,</span><span class="w"> </span><span class="mi">4</span><span class="p">,</span><span class="w"> </span><span class="mi">6</span><span class="p">,</span><span class="w"> </span><span class="mi">8</span><span class="p">,</span><span class="w"> </span><span class="mi">10</span><span class="p" data-group-id="2745510598-3">]</span><span class="w"> </span><span class="gp unselectable">iex> </span><span class="n">stream</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nc">Stream</span><span class="o">.</span><span class="n">drop_every</span><span class="p" data-group-id="2745510598-4">(</span><span class="mi">1</span><span class="o">.</span><span class="o">.</span><span class="mi">1000</span><span class="p">,</span><span class="w"> </span><span class="mi">1</span><span class="p" data-group-id="2745510598-4">)</span><span class="w"> </span><span class="gp unselectable">iex> </span><span class="nc">Enum</span><span class="o">.</span><span class="n">to_list</span><span class="p" data-group-id="2745510598-5">(</span><span class="n">stream</span><span class="p" data-group-id="2745510598-5">)</span><span class="w"> </span><span class="p" data-group-id="2745510598-6">[</span><span class="p" data-group-id="2745510598-6">]</span><span class="w"> </span><span class="gp unselectable">iex> </span><span class="n">stream</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nc">Stream</span><span class="o">.</span><span class="n">drop_every</span><span class="p" data-group-id="2745510598-7">(</span><span class="p" data-group-id="2745510598-8">[</span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="mi">2</span><span class="p">,</span><span class="w"> </span><span class="mi">3</span><span class="p">,</span><span class="w"> </span><span class="mi">4</span><span class="p">,</span><span class="w"> </span><span class="mi">5</span><span class="p" data-group-id="2745510598-8">]</span><span class="p">,</span><span class="w"> </span><span class="mi">0</span><span class="p" data-group-id="2745510598-7">)</span><span class="w"> </span><span class="gp unselectable">iex> </span><span class="nc">Enum</span><span class="o">.</span><span class="n">to_list</span><span class="p" data-group-id="2745510598-9">(</span><span class="n">stream</span><span class="p" data-group-id="2745510598-9">)</span><span class="w"> </span><span class="p" data-group-id="2745510598-10">[</span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="mi">2</span><span class="p">,</span><span class="w"> </span><span class="mi">3</span><span class="p">,</span><span class="w"> </span><span class="mi">4</span><span class="p">,</span><span class="w"> </span><span class="mi">5</span><span class="p" data-group-id="2745510598-10">]</span></code></pre> </section> </div> <div class="detail" id="drop_while/2"> <div class="detail-header"> <a href="#drop_while/2" class="detail-link" title="Link to this function"> <span class="icon-link" aria-hidden="true"></span> <span class="sr-only">Link to this function</span> </a> <span class="signature">drop_while(enum, fun)</span> <a href="https://github.com/elixir-lang/elixir/blob/v1.7.2/lib/elixir/lib/stream.ex#L407" class="view-source" rel="help" title="View Source"> <span class="icon-code" aria-hidden="true"></span> <span class="sr-only">View Source</span> </a> <div class="specs"> <pre>drop_while(<a href="Enumerable.html#t:t/0">Enumerable.t</a>(), (<a href="#t:element/0">element</a>() -> <a href="typespecs.html#built-in-types">as_boolean</a>(<a href="typespecs.html#built-in-types">term</a>()))) :: <a href="Enumerable.html#t:t/0">Enumerable.t</a>()</pre> </div> </div> <section class="docstring"> <p>Lazily drops elements of the enumerable while the given function returns a truthy value.</p> <h2 id="drop_while/2-examples" class="section-heading"> <a href="#drop_while/2-examples" class="hover-link"><span class="icon-link" aria-hidden="true"></span></a> Examples </h2> <pre><code class="nohighlight makeup elixir"><span class="gp unselectable">iex> </span><span class="n">stream</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nc">Stream</span><span class="o">.</span><span class="n">drop_while</span><span class="p" data-group-id="2772372721-1">(</span><span class="mi">1</span><span class="o">.</span><span class="o">.</span><span class="mi">10</span><span class="p">,</span><span class="w"> </span><span class="o">&</span><span class="p" data-group-id="2772372721-2">(</span><span class="ni">&1</span><span class="w"> </span><span class="o"><=</span><span class="w"> </span><span class="mi">5</span><span class="p" data-group-id="2772372721-2">)</span><span class="p" data-group-id="2772372721-1">)</span><span class="w"> </span><span class="gp unselectable">iex> </span><span class="nc">Enum</span><span class="o">.</span><span class="n">to_list</span><span class="p" data-group-id="2772372721-3">(</span><span class="n">stream</span><span class="p" data-group-id="2772372721-3">)</span><span class="w"> </span><span class="p" data-group-id="2772372721-4">[</span><span class="mi">6</span><span class="p">,</span><span class="w"> </span><span class="mi">7</span><span class="p">,</span><span class="w"> </span><span class="mi">8</span><span class="p">,</span><span class="w"> </span><span class="mi">9</span><span class="p">,</span><span class="w"> </span><span class="mi">10</span><span class="p" data-group-id="2772372721-4">]</span></code></pre> </section> </div> <div class="detail" id="each/2"> <div class="detail-header"> <a href="#each/2" class="detail-link" title="Link to this function"> <span class="icon-link" aria-hidden="true"></span> <span class="sr-only">Link to this function</span> </a> <span class="signature">each(enum, fun)</span> <a href="https://github.com/elixir-lang/elixir/blob/v1.7.2/lib/elixir/lib/stream.ex#L429" class="view-source" rel="help" title="View Source"> <span class="icon-code" aria-hidden="true"></span> <span class="sr-only">View Source</span> </a> <div class="specs"> <pre>each(<a href="Enumerable.html#t:t/0">Enumerable.t</a>(), (<a href="#t:element/0">element</a>() -> <a href="typespecs.html#built-in-types">term</a>())) :: <a href="Enumerable.html#t:t/0">Enumerable.t</a>()</pre> </div> </div> <section class="docstring"> <p>Executes the given function for each item.</p> <p>Useful for adding side effects (like printing) to a stream.</p> <h2 id="each/2-examples" class="section-heading"> <a href="#each/2-examples" class="hover-link"><span class="icon-link" aria-hidden="true"></span></a> Examples </h2> <pre><code class="nohighlight makeup elixir"><span class="gp unselectable">iex> </span><span class="n">stream</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nc">Stream</span><span class="o">.</span><span class="n">each</span><span class="p" data-group-id="2219244931-1">(</span><span class="p" data-group-id="2219244931-2">[</span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="mi">2</span><span class="p">,</span><span class="w"> </span><span class="mi">3</span><span class="p" data-group-id="2219244931-2">]</span><span class="p">,</span><span class="w"> </span><span class="k" data-group-id="2219244931-3">fn</span><span class="w"> </span><span class="n">x</span><span class="w"> </span><span class="o">-></span><span class="w"> </span><span class="n">send</span><span class="p" data-group-id="2219244931-4">(</span><span class="n">self</span><span class="p" data-group-id="2219244931-5">(</span><span class="p" data-group-id="2219244931-5">)</span><span class="p">,</span><span class="w"> </span><span class="n">x</span><span class="p" data-group-id="2219244931-4">)</span><span class="w"> </span><span class="k" data-group-id="2219244931-3">end</span><span class="p" data-group-id="2219244931-1">)</span><span class="w"> </span><span class="gp unselectable">iex> </span><span class="nc">Enum</span><span class="o">.</span><span class="n">to_list</span><span class="p" data-group-id="2219244931-6">(</span><span class="n">stream</span><span class="p" data-group-id="2219244931-6">)</span><span class="w"> </span><span class="gp unselectable">iex> </span><span class="k">receive</span><span class="w"> </span><span class="ss">do</span><span class="p">:</span><span class="w"> </span><span class="p" data-group-id="2219244931-7">(</span><span class="n">x</span><span class="w"> </span><span class="ow">when</span><span class="w"> </span><span class="n">is_integer</span><span class="p" data-group-id="2219244931-8">(</span><span class="n">x</span><span class="p" data-group-id="2219244931-8">)</span><span class="w"> </span><span class="o">-></span><span class="w"> </span><span class="n">x</span><span class="p" data-group-id="2219244931-7">)</span><span class="w"> </span><span class="mi">1</span><span class="w"> </span><span class="gp unselectable">iex> </span><span class="k">receive</span><span class="w"> </span><span class="ss">do</span><span class="p">:</span><span class="w"> </span><span class="p" data-group-id="2219244931-9">(</span><span class="n">x</span><span class="w"> </span><span class="ow">when</span><span class="w"> </span><span class="n">is_integer</span><span class="p" data-group-id="2219244931-10">(</span><span class="n">x</span><span class="p" data-group-id="2219244931-10">)</span><span class="w"> </span><span class="o">-></span><span class="w"> </span><span class="n">x</span><span class="p" data-group-id="2219244931-9">)</span><span class="w"> </span><span class="mi">2</span><span class="w"> </span><span class="gp unselectable">iex> </span><span class="k">receive</span><span class="w"> </span><span class="ss">do</span><span class="p">:</span><span class="w"> </span><span class="p" data-group-id="2219244931-11">(</span><span class="n">x</span><span class="w"> </span><span class="ow">when</span><span class="w"> </span><span class="n">is_integer</span><span class="p" data-group-id="2219244931-12">(</span><span class="n">x</span><span class="p" data-group-id="2219244931-12">)</span><span class="w"> </span><span class="o">-></span><span class="w"> </span><span class="n">x</span><span class="p" data-group-id="2219244931-11">)</span><span class="w"> </span><span class="mi">3</span></code></pre> </section> </div> <div class="detail" id="filter/2"> <div class="detail-header"> <a href="#filter/2" class="detail-link" title="Link to this function"> <span class="icon-link" aria-hidden="true"></span> <span class="sr-only">Link to this function</span> </a> <span class="signature">filter(enum, fun)</span> <a href="https://github.com/elixir-lang/elixir/blob/v1.7.2/lib/elixir/lib/stream.ex#L472" class="view-source" rel="help" title="View Source"> <span class="icon-code" aria-hidden="true"></span> <span class="sr-only">View Source</span> </a> <div class="specs"> <pre>filter(<a href="Enumerable.html#t:t/0">Enumerable.t</a>(), (<a href="#t:element/0">element</a>() -> <a href="typespecs.html#built-in-types">as_boolean</a>(<a href="typespecs.html#built-in-types">term</a>()))) :: <a href="Enumerable.html#t:t/0">Enumerable.t</a>()</pre> </div> </div> <section class="docstring"> <p>Creates a stream that filters elements according to the given function on enumeration.</p> <h2 id="filter/2-examples" class="section-heading"> <a href="#filter/2-examples" class="hover-link"><span class="icon-link" aria-hidden="true"></span></a> Examples </h2> <pre><code class="nohighlight makeup elixir"><span class="gp unselectable">iex> </span><span class="n">stream</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nc">Stream</span><span class="o">.</span><span class="n">filter</span><span class="p" data-group-id="3675752245-1">(</span><span class="p" data-group-id="3675752245-2">[</span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="mi">2</span><span class="p">,</span><span class="w"> </span><span class="mi">3</span><span class="p" data-group-id="3675752245-2">]</span><span class="p">,</span><span class="w"> </span><span class="k" data-group-id="3675752245-3">fn</span><span class="w"> </span><span class="n">x</span><span class="w"> </span><span class="o">-></span><span class="w"> </span><span class="n">rem</span><span class="p" data-group-id="3675752245-4">(</span><span class="n">x</span><span class="p">,</span><span class="w"> </span><span class="mi">2</span><span class="p" data-group-id="3675752245-4">)</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="mi">0</span><span class="w"> </span><span class="k" data-group-id="3675752245-3">end</span><span class="p" data-group-id="3675752245-1">)</span><span class="w"> </span><span class="gp unselectable">iex> </span><span class="nc">Enum</span><span class="o">.</span><span class="n">to_list</span><span class="p" data-group-id="3675752245-5">(</span><span class="n">stream</span><span class="p" data-group-id="3675752245-5">)</span><span class="w"> </span><span class="p" data-group-id="3675752245-6">[</span><span class="mi">2</span><span class="p" data-group-id="3675752245-6">]</span></code></pre> </section> </div> <div class="detail" id="flat_map/2"> <div class="detail-header"> <a href="#flat_map/2" class="detail-link" title="Link to this function"> <span class="icon-link" aria-hidden="true"></span> <span class="sr-only">Link to this function</span> </a> <span class="signature">flat_map(enum, mapper)</span> <a href="https://github.com/elixir-lang/elixir/blob/v1.7.2/lib/elixir/lib/stream.ex#L456" class="view-source" rel="help" title="View Source"> <span class="icon-code" aria-hidden="true"></span> <span class="sr-only">View Source</span> </a> <div class="specs"> <pre>flat_map(<a href="Enumerable.html#t:t/0">Enumerable.t</a>(), (<a href="#t:element/0">element</a>() -> <a href="Enumerable.html#t:t/0">Enumerable.t</a>())) :: <a href="Enumerable.html#t:t/0">Enumerable.t</a>()</pre> </div> </div> <section class="docstring"> <p>Maps the given <code class="inline">fun</code> over <code class="inline">enumerable</code> and flattens the result.</p> <p>This function returns a new stream built by appending the result of invoking <code class="inline">fun</code> on each element of <code class="inline">enumerable</code> together.</p> <h2 id="flat_map/2-examples" class="section-heading"> <a href="#flat_map/2-examples" class="hover-link"><span class="icon-link" aria-hidden="true"></span></a> Examples </h2> <pre><code class="nohighlight makeup elixir"><span class="gp unselectable">iex> </span><span class="n">stream</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nc">Stream</span><span class="o">.</span><span class="n">flat_map</span><span class="p" data-group-id="7217637905-1">(</span><span class="p" data-group-id="7217637905-2">[</span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="mi">2</span><span class="p">,</span><span class="w"> </span><span class="mi">3</span><span class="p" data-group-id="7217637905-2">]</span><span class="p">,</span><span class="w"> </span><span class="k" data-group-id="7217637905-3">fn</span><span class="w"> </span><span class="n">x</span><span class="w"> </span><span class="o">-></span><span class="w"> </span><span class="p" data-group-id="7217637905-4">[</span><span class="n">x</span><span class="p">,</span><span class="w"> </span><span class="n">x</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="mi">2</span><span class="p" data-group-id="7217637905-4">]</span><span class="w"> </span><span class="k" data-group-id="7217637905-3">end</span><span class="p" data-group-id="7217637905-1">)</span><span class="w"> </span><span class="gp unselectable">iex> </span><span class="nc">Enum</span><span class="o">.</span><span class="n">to_list</span><span class="p" data-group-id="7217637905-5">(</span><span class="n">stream</span><span class="p" data-group-id="7217637905-5">)</span><span class="w"> </span><span class="p" data-group-id="7217637905-6">[</span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="mi">2</span><span class="p">,</span><span class="w"> </span><span class="mi">2</span><span class="p">,</span><span class="w"> </span><span class="mi">4</span><span class="p">,</span><span class="w"> </span><span class="mi">3</span><span class="p">,</span><span class="w"> </span><span class="mi">6</span><span class="p" data-group-id="7217637905-6">]</span><span class="w"> </span><span class="gp unselectable">iex> </span><span class="n">stream</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nc">Stream</span><span class="o">.</span><span class="n">flat_map</span><span class="p" data-group-id="7217637905-7">(</span><span class="p" data-group-id="7217637905-8">[</span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="mi">2</span><span class="p">,</span><span class="w"> </span><span class="mi">3</span><span class="p" data-group-id="7217637905-8">]</span><span class="p">,</span><span class="w"> </span><span class="k" data-group-id="7217637905-9">fn</span><span class="w"> </span><span class="n">x</span><span class="w"> </span><span class="o">-></span><span class="w"> </span><span class="p" data-group-id="7217637905-10">[</span><span class="p" data-group-id="7217637905-11">[</span><span class="n">x</span><span class="p" data-group-id="7217637905-11">]</span><span class="p" data-group-id="7217637905-10">]</span><span class="w"> </span><span class="k" data-group-id="7217637905-9">end</span><span class="p" data-group-id="7217637905-7">)</span><span class="w"> </span><span class="gp unselectable">iex> </span><span class="nc">Enum</span><span class="o">.</span><span class="n">to_list</span><span class="p" data-group-id="7217637905-12">(</span><span class="n">stream</span><span class="p" data-group-id="7217637905-12">)</span><span class="w"> </span><span class="p" data-group-id="7217637905-13">[</span><span class="p" data-group-id="7217637905-14">[</span><span class="mi">1</span><span class="p" data-group-id="7217637905-14">]</span><span class="p">,</span><span class="w"> </span><span class="p" data-group-id="7217637905-15">[</span><span class="mi">2</span><span class="p" data-group-id="7217637905-15">]</span><span class="p">,</span><span class="w"> </span><span class="p" data-group-id="7217637905-16">[</span><span class="mi">3</span><span class="p" data-group-id="7217637905-16">]</span><span class="p" data-group-id="7217637905-13">]</span></code></pre> </section> </div> <div class="detail" id="intersperse/2"> <div class="detail-header"> <a href="#intersperse/2" class="detail-link" title="Link to this function"> <span class="icon-link" aria-hidden="true"></span> <span class="sr-only">Link to this function</span> </a> <span class="signature">intersperse(enumerable, intersperse_element)</span> <a href="https://github.com/elixir-lang/elixir/blob/v1.7.2/lib/elixir/lib/stream.ex#L1505" class="view-source" rel="help" title="View Source"> <span class="icon-code" aria-hidden="true"></span> <span class="sr-only">View Source</span> </a> <span class="note">(since 1.6.0)</span> <div class="specs"> <pre>intersperse(<a href="Enumerable.html#t:t/0">Enumerable.t</a>(), <a href="typespecs.html#basic-types">any</a>()) :: <a href="Enumerable.html#t:t/0">Enumerable.t</a>()</pre> </div> </div> <section class="docstring"> <p>Lazily intersperses <code class="inline">intersperse_element</code> between each element of the enumeration.</p> <h2 id="intersperse/2-examples" class="section-heading"> <a href="#intersperse/2-examples" class="hover-link"><span class="icon-link" aria-hidden="true"></span></a> Examples </h2> <pre><code class="nohighlight makeup elixir"><span class="gp unselectable">iex> </span><span class="nc">Stream</span><span class="o">.</span><span class="n">intersperse</span><span class="p" data-group-id="3819083212-1">(</span><span class="p" data-group-id="3819083212-2">[</span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="mi">2</span><span class="p">,</span><span class="w"> </span><span class="mi">3</span><span class="p" data-group-id="3819083212-2">]</span><span class="p">,</span><span class="w"> </span><span class="mi">0</span><span class="p" data-group-id="3819083212-1">)</span><span class="w"> </span><span class="o">|></span><span class="w"> </span><span class="nc">Enum</span><span class="o">.</span><span class="n">to_list</span><span class="p" data-group-id="3819083212-3">(</span><span class="p" data-group-id="3819083212-3">)</span><span class="w"> </span><span class="p" data-group-id="3819083212-4">[</span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> </span><span class="mi">2</span><span class="p">,</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> </span><span class="mi">3</span><span class="p" data-group-id="3819083212-4">]</span><span class="w"> </span><span class="gp unselectable">iex> </span><span class="nc">Stream</span><span class="o">.</span><span class="n">intersperse</span><span class="p" data-group-id="3819083212-5">(</span><span class="p" data-group-id="3819083212-6">[</span><span class="mi">1</span><span class="p" data-group-id="3819083212-6">]</span><span class="p">,</span><span class="w"> </span><span class="mi">0</span><span class="p" data-group-id="3819083212-5">)</span><span class="w"> </span><span class="o">|></span><span class="w"> </span><span class="nc">Enum</span><span class="o">.</span><span class="n">to_list</span><span class="p" data-group-id="3819083212-7">(</span><span class="p" data-group-id="3819083212-7">)</span><span class="w"> </span><span class="p" data-group-id="3819083212-8">[</span><span class="mi">1</span><span class="p" data-group-id="3819083212-8">]</span><span class="w"> </span><span class="gp unselectable">iex> </span><span class="nc">Stream</span><span class="o">.</span><span class="n">intersperse</span><span class="p" data-group-id="3819083212-9">(</span><span class="p" data-group-id="3819083212-10">[</span><span class="p" data-group-id="3819083212-10">]</span><span class="p">,</span><span class="w"> </span><span class="mi">0</span><span class="p" data-group-id="3819083212-9">)</span><span class="w"> </span><span class="o">|></span><span class="w"> </span><span class="nc">Enum</span><span class="o">.</span><span class="n">to_list</span><span class="p" data-group-id="3819083212-11">(</span><span class="p" data-group-id="3819083212-11">)</span><span class="w"> </span><span class="p" data-group-id="3819083212-12">[</span><span class="p" data-group-id="3819083212-12">]</span></code></pre> </section> </div> <div class="detail" id="interval/1"> <div class="detail-header"> <a href="#interval/1" class="detail-link" title="Link to this function"> <span class="icon-link" aria-hidden="true"></span> <span class="sr-only">Link to this function</span> </a> <span class="signature">interval(n)</span> <a href="https://github.com/elixir-lang/elixir/blob/v1.7.2/lib/elixir/lib/stream.ex#L502" class="view-source" rel="help" title="View Source"> <span class="icon-code" aria-hidden="true"></span> <span class="sr-only">View Source</span> </a> <div class="specs"> <pre>interval(<a href="typespecs.html#basic-types">non_neg_integer</a>()) :: <a href="Enumerable.html#t:t/0">Enumerable.t</a>()</pre> </div> </div> <section class="docstring"> <p>Creates a stream that emits a value after the given period <code class="inline">n</code> in milliseconds.</p> <p>The values emitted are an increasing counter starting at <code class="inline">0</code>. This operation will block the caller by the given interval every time a new item is streamed.</p> <p>Do not use this function to generate a sequence of numbers. If blocking the caller process is not necessary, use <code class="inline">Stream.iterate(0, & &1 + 1)</code> instead.</p> <h2 id="interval/1-examples" class="section-heading"> <a href="#interval/1-examples" class="hover-link"><span class="icon-link" aria-hidden="true"></span></a> Examples </h2> <pre><code class="nohighlight makeup elixir"><span class="gp unselectable">iex> </span><span class="nc">Stream</span><span class="o">.</span><span class="n">interval</span><span class="p" data-group-id="2786271727-1">(</span><span class="mi">10</span><span class="p" data-group-id="2786271727-1">)</span><span class="w"> </span><span class="o">|></span><span class="w"> </span><span class="nc">Enum</span><span class="o">.</span><span class="n">take</span><span class="p" data-group-id="2786271727-2">(</span><span class="mi">10</span><span class="p" data-group-id="2786271727-2">)</span><span class="w"> </span><span class="p" data-group-id="2786271727-3">[</span><span class="mi">0</span><span class="p">,</span><span class="w"> </span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="mi">2</span><span class="p">,</span><span class="w"> </span><span class="mi">3</span><span class="p">,</span><span class="w"> </span><span class="mi">4</span><span class="p">,</span><span class="w"> </span><span class="mi">5</span><span class="p">,</span><span class="w"> </span><span class="mi">6</span><span class="p">,</span><span class="w"> </span><span class="mi">7</span><span class="p">,</span><span class="w"> </span><span class="mi">8</span><span class="p">,</span><span class="w"> </span><span class="mi">9</span><span class="p" data-group-id="2786271727-3">]</span></code></pre> </section> </div> <div class="detail" id="into/3"> <span id="into/2"></span> <div class="detail-header"> <a href="#into/3" class="detail-link" title="Link to this function"> <span class="icon-link" aria-hidden="true"></span> <span class="sr-only">Link to this function</span> </a> <span class="signature">into(enum, collectable, transform \\ fn x -> x end)</span> <a href="https://github.com/elixir-lang/elixir/blob/v1.7.2/lib/elixir/lib/stream.ex#L516" class="view-source" rel="help" title="View Source"> <span class="icon-code" aria-hidden="true"></span> <span class="sr-only">View Source</span> </a> <div class="specs"> <pre>into(<a href="Enumerable.html#t:t/0">Enumerable.t</a>(), <a href="Collectable.html#t:t/0">Collectable.t</a>(), (<a href="typespecs.html#built-in-types">term</a>() -> <a href="typespecs.html#built-in-types">term</a>())) :: <a href="Enumerable.html#t:t/0">Enumerable.t</a>()</pre> </div> </div> <section class="docstring"> <p>Injects the stream values into the given collectable as a side-effect.</p> <p>This function is often used with <a href="#run/1"><code class="inline">run/1</code></a> since any evaluation is delayed until the stream is executed. See <a href="#run/1"><code class="inline">run/1</code></a> for an example.</p> </section> </div> <div class="detail" id="iterate/2"> <div class="detail-header"> <a href="#iterate/2" class="detail-link" title="Link to this function"> <span class="icon-link" aria-hidden="true"></span> <span class="sr-only">Link to this function</span> </a> <span class="signature">iterate(start_value, next_fun)</span> <a href="https://github.com/elixir-lang/elixir/blob/v1.7.2/lib/elixir/lib/stream.ex#L1292" class="view-source" rel="help" title="View Source"> <span class="icon-code" aria-hidden="true"></span> <span class="sr-only">View Source</span> </a> <div class="specs"> <pre>iterate(<a href="#t:element/0">element</a>(), (<a href="#t:element/0">element</a>() -> <a href="#t:element/0">element</a>())) :: <a href="Enumerable.html#t:t/0">Enumerable.t</a>()</pre> </div> </div> <section class="docstring"> <p>Emits a sequence of values, starting with <code class="inline">start_value</code>. Successive values are generated by calling <code class="inline">next_fun</code> on the previous value.</p> <h2 id="iterate/2-examples" class="section-heading"> <a href="#iterate/2-examples" class="hover-link"><span class="icon-link" aria-hidden="true"></span></a> Examples </h2> <pre><code class="nohighlight makeup elixir"><span class="gp unselectable">iex> </span><span class="nc">Stream</span><span class="o">.</span><span class="n">iterate</span><span class="p" data-group-id="0895853689-1">(</span><span class="mi">0</span><span class="p">,</span><span class="w"> </span><span class="o">&</span><span class="p" data-group-id="0895853689-2">(</span><span class="ni">&1</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="mi">1</span><span class="p" data-group-id="0895853689-2">)</span><span class="p" data-group-id="0895853689-1">)</span><span class="w"> </span><span class="o">|></span><span class="w"> </span><span class="nc">Enum</span><span class="o">.</span><span class="n">take</span><span class="p" data-group-id="0895853689-3">(</span><span class="mi">5</span><span class="p" data-group-id="0895853689-3">)</span><span class="w"> </span><span class="p" data-group-id="0895853689-4">[</span><span class="mi">0</span><span class="p">,</span><span class="w"> </span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="mi">2</span><span class="p">,</span><span class="w"> </span><span class="mi">3</span><span class="p">,</span><span class="w"> </span><span class="mi">4</span><span class="p" data-group-id="0895853689-4">]</span></code></pre> </section> </div> <div class="detail" id="map/2"> <div class="detail-header"> <a href="#map/2" class="detail-link" title="Link to this function"> <span class="icon-link" aria-hidden="true"></span> <span class="sr-only">Link to this function</span> </a> <span class="signature">map(enum, fun)</span> <a href="https://github.com/elixir-lang/elixir/blob/v1.7.2/lib/elixir/lib/stream.ex#L561" class="view-source" rel="help" title="View Source"> <span class="icon-code" aria-hidden="true"></span> <span class="sr-only">View Source</span> </a> <div class="specs"> <pre>map(<a href="Enumerable.html#t:t/0">Enumerable.t</a>(), (<a href="#t:element/0">element</a>() -> <a href="typespecs.html#basic-types">any</a>())) :: <a href="Enumerable.html#t:t/0">Enumerable.t</a>()</pre> </div> </div> <section class="docstring"> <p>Creates a stream that will apply the given function on enumeration.</p> <h2 id="map/2-examples" class="section-heading"> <a href="#map/2-examples" class="hover-link"><span class="icon-link" aria-hidden="true"></span></a> Examples </h2> <pre><code class="nohighlight makeup elixir"><span class="gp unselectable">iex> </span><span class="n">stream</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nc">Stream</span><span class="o">.</span><span class="n">map</span><span class="p" data-group-id="7103613108-1">(</span><span class="p" data-group-id="7103613108-2">[</span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="mi">2</span><span class="p">,</span><span class="w"> </span><span class="mi">3</span><span class="p" data-group-id="7103613108-2">]</span><span class="p">,</span><span class="w"> </span><span class="k" data-group-id="7103613108-3">fn</span><span class="w"> </span><span class="n">x</span><span class="w"> </span><span class="o">-></span><span class="w"> </span><span class="n">x</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="mi">2</span><span class="w"> </span><span class="k" data-group-id="7103613108-3">end</span><span class="p" data-group-id="7103613108-1">)</span><span class="w"> </span><span class="gp unselectable">iex> </span><span class="nc">Enum</span><span class="o">.</span><span class="n">to_list</span><span class="p" data-group-id="7103613108-4">(</span><span class="n">stream</span><span class="p" data-group-id="7103613108-4">)</span><span class="w"> </span><span class="p" data-group-id="7103613108-5">[</span><span class="mi">2</span><span class="p">,</span><span class="w"> </span><span class="mi">4</span><span class="p">,</span><span class="w"> </span><span class="mi">6</span><span class="p" data-group-id="7103613108-5">]</span></code></pre> </section> </div> <div class="detail" id="map_every/3"> <div class="detail-header"> <a href="#map_every/3" class="detail-link" title="Link to this function"> <span class="icon-link" aria-hidden="true"></span> <span class="sr-only">Link to this function</span> </a> <span class="signature">map_every(enum, nth, fun)</span> <a href="https://github.com/elixir-lang/elixir/blob/v1.7.2/lib/elixir/lib/stream.ex#L596" class="view-source" rel="help" title="View Source"> <span class="icon-code" aria-hidden="true"></span> <span class="sr-only">View Source</span> </a> <span class="note">(since 1.4.0)</span> <div class="specs"> <pre>map_every(<a href="Enumerable.html#t:t/0">Enumerable.t</a>(), <a href="typespecs.html#basic-types">non_neg_integer</a>(), (<a href="#t:element/0">element</a>() -> <a href="typespecs.html#basic-types">any</a>())) :: <a href="Enumerable.html#t:t/0">Enumerable.t</a>()</pre> </div> </div> <section class="docstring"> <p>Creates a stream that will apply the given function on every <code class="inline">nth</code> item from the enumerable.</p> <p>The first item is always passed to the given function.</p> <p><code class="inline">nth</code> must be a non-negative integer.</p> <h2 id="map_every/3-examples" class="section-heading"> <a href="#map_every/3-examples" class="hover-link"><span class="icon-link" aria-hidden="true"></span></a> Examples </h2> <pre><code class="nohighlight makeup elixir"><span class="gp unselectable">iex> </span><span class="n">stream</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nc">Stream</span><span class="o">.</span><span class="n">map_every</span><span class="p" data-group-id="0546337359-1">(</span><span class="mi">1</span><span class="o">.</span><span class="o">.</span><span class="mi">10</span><span class="p">,</span><span class="w"> </span><span class="mi">2</span><span class="p">,</span><span class="w"> </span><span class="k" data-group-id="0546337359-2">fn</span><span class="w"> </span><span class="n">x</span><span class="w"> </span><span class="o">-></span><span class="w"> </span><span class="n">x</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="mi">2</span><span class="w"> </span><span class="k" data-group-id="0546337359-2">end</span><span class="p" data-group-id="0546337359-1">)</span><span class="w"> </span><span class="gp unselectable">iex> </span><span class="nc">Enum</span><span class="o">.</span><span class="n">to_list</span><span class="p" data-group-id="0546337359-3">(</span><span class="n">stream</span><span class="p" data-group-id="0546337359-3">)</span><span class="w"> </span><span class="p" data-group-id="0546337359-4">[</span><span class="mi">2</span><span class="p">,</span><span class="w"> </span><span class="mi">2</span><span class="p">,</span><span class="w"> </span><span class="mi">6</span><span class="p">,</span><span class="w"> </span><span class="mi">4</span><span class="p">,</span><span class="w"> </span><span class="mi">10</span><span class="p">,</span><span class="w"> </span><span class="mi">6</span><span class="p">,</span><span class="w"> </span><span class="mi">14</span><span class="p">,</span><span class="w"> </span><span class="mi">8</span><span class="p">,</span><span class="w"> </span><span class="mi">18</span><span class="p">,</span><span class="w"> </span><span class="mi">10</span><span class="p" data-group-id="0546337359-4">]</span><span class="w"> </span><span class="gp unselectable">iex> </span><span class="n">stream</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nc">Stream</span><span class="o">.</span><span class="n">map_every</span><span class="p" data-group-id="0546337359-5">(</span><span class="p" data-group-id="0546337359-6">[</span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="mi">2</span><span class="p">,</span><span class="w"> </span><span class="mi">3</span><span class="p">,</span><span class="w"> </span><span class="mi">4</span><span class="p">,</span><span class="w"> </span><span class="mi">5</span><span class="p" data-group-id="0546337359-6">]</span><span class="p">,</span><span class="w"> </span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="k" data-group-id="0546337359-7">fn</span><span class="w"> </span><span class="n">x</span><span class="w"> </span><span class="o">-></span><span class="w"> </span><span class="n">x</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="mi">2</span><span class="w"> </span><span class="k" data-group-id="0546337359-7">end</span><span class="p" data-group-id="0546337359-5">)</span><span class="w"> </span><span class="gp unselectable">iex> </span><span class="nc">Enum</span><span class="o">.</span><span class="n">to_list</span><span class="p" data-group-id="0546337359-8">(</span><span class="n">stream</span><span class="p" data-group-id="0546337359-8">)</span><span class="w"> </span><span class="p" data-group-id="0546337359-9">[</span><span class="mi">2</span><span class="p">,</span><span class="w"> </span><span class="mi">4</span><span class="p">,</span><span class="w"> </span><span class="mi">6</span><span class="p">,</span><span class="w"> </span><span class="mi">8</span><span class="p">,</span><span class="w"> </span><span class="mi">10</span><span class="p" data-group-id="0546337359-9">]</span><span class="w"> </span><span class="gp unselectable">iex> </span><span class="n">stream</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nc">Stream</span><span class="o">.</span><span class="n">map_every</span><span class="p" data-group-id="0546337359-10">(</span><span class="mi">1</span><span class="o">.</span><span class="o">.</span><span class="mi">5</span><span class="p">,</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> </span><span class="k" data-group-id="0546337359-11">fn</span><span class="w"> </span><span class="n">x</span><span class="w"> </span><span class="o">-></span><span class="w"> </span><span class="n">x</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="mi">2</span><span class="w"> </span><span class="k" data-group-id="0546337359-11">end</span><span class="p" data-group-id="0546337359-10">)</span><span class="w"> </span><span class="gp unselectable">iex> </span><span class="nc">Enum</span><span class="o">.</span><span class="n">to_list</span><span class="p" data-group-id="0546337359-12">(</span><span class="n">stream</span><span class="p" data-group-id="0546337359-12">)</span><span class="w"> </span><span class="p" data-group-id="0546337359-13">[</span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="mi">2</span><span class="p">,</span><span class="w"> </span><span class="mi">3</span><span class="p">,</span><span class="w"> </span><span class="mi">4</span><span class="p">,</span><span class="w"> </span><span class="mi">5</span><span class="p" data-group-id="0546337359-13">]</span></code></pre> </section> </div> <div class="detail" id="reject/2"> <div class="detail-header"> <a href="#reject/2" class="detail-link" title="Link to this function"> <span class="icon-link" aria-hidden="true"></span> <span class="sr-only">Link to this function</span> </a> <span class="signature">reject(enum, fun)</span> <a href="https://github.com/elixir-lang/elixir/blob/v1.7.2/lib/elixir/lib/stream.ex#L612" class="view-source" rel="help" title="View Source"> <span class="icon-code" aria-hidden="true"></span> <span class="sr-only">View Source</span> </a> <div class="specs"> <pre>reject(<a href="Enumerable.html#t:t/0">Enumerable.t</a>(), (<a href="#t:element/0">element</a>() -> <a href="typespecs.html#built-in-types">as_boolean</a>(<a href="typespecs.html#built-in-types">term</a>()))) :: <a href="Enumerable.html#t:t/0">Enumerable.t</a>()</pre> </div> </div> <section class="docstring"> <p>Creates a stream that will reject elements according to the given function on enumeration.</p> <h2 id="reject/2-examples" class="section-heading"> <a href="#reject/2-examples" class="hover-link"><span class="icon-link" aria-hidden="true"></span></a> Examples </h2> <pre><code class="nohighlight makeup elixir"><span class="gp unselectable">iex> </span><span class="n">stream</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nc">Stream</span><span class="o">.</span><span class="n">reject</span><span class="p" data-group-id="2956958208-1">(</span><span class="p" data-group-id="2956958208-2">[</span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="mi">2</span><span class="p">,</span><span class="w"> </span><span class="mi">3</span><span class="p" data-group-id="2956958208-2">]</span><span class="p">,</span><span class="w"> </span><span class="k" data-group-id="2956958208-3">fn</span><span class="w"> </span><span class="n">x</span><span class="w"> </span><span class="o">-></span><span class="w"> </span><span class="n">rem</span><span class="p" data-group-id="2956958208-4">(</span><span class="n">x</span><span class="p">,</span><span class="w"> </span><span class="mi">2</span><span class="p" data-group-id="2956958208-4">)</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="mi">0</span><span class="w"> </span><span class="k" data-group-id="2956958208-3">end</span><span class="p" data-group-id="2956958208-1">)</span><span class="w"> </span><span class="gp unselectable">iex> </span><span class="nc">Enum</span><span class="o">.</span><span class="n">to_list</span><span class="p" data-group-id="2956958208-5">(</span><span class="n">stream</span><span class="p" data-group-id="2956958208-5">)</span><span class="w"> </span><span class="p" data-group-id="2956958208-6">[</span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="mi">3</span><span class="p" data-group-id="2956958208-6">]</span></code></pre> </section> </div> <div class="detail" id="repeatedly/1"> <div class="detail-header"> <a href="#repeatedly/1" class="detail-link" title="Link to this function"> <span class="icon-link" aria-hidden="true"></span> <span class="sr-only">Link to this function</span> </a> <span class="signature">repeatedly(generator_fun)</span> <a href="https://github.com/elixir-lang/elixir/blob/v1.7.2/lib/elixir/lib/stream.ex#L1315" class="view-source" rel="help" title="View Source"> <span class="icon-code" aria-hidden="true"></span> <span class="sr-only">View Source</span> </a> <div class="specs"> <pre>repeatedly((() -> <a href="#t:element/0">element</a>())) :: <a href="Enumerable.html#t:t/0">Enumerable.t</a>()</pre> </div> </div> <section class="docstring"> <p>Returns a stream generated by calling <code class="inline">generator_fun</code> repeatedly.</p> <h2 id="repeatedly/1-examples" class="section-heading"> <a href="#repeatedly/1-examples" class="hover-link"><span class="icon-link" aria-hidden="true"></span></a> Examples </h2> <pre><code class="nohighlight makeup elixir"><span class="c1"># Although not necessary, let's seed the random algorithm</span><span class="w"> </span><span class="gp unselectable">iex> </span><span class="ss">:rand</span><span class="o">.</span><span class="n">seed</span><span class="p" data-group-id="0334237736-1">(</span><span class="ss">:exsplus</span><span class="p">,</span><span class="w"> </span><span class="p" data-group-id="0334237736-2">{</span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="mi">2</span><span class="p">,</span><span class="w"> </span><span class="mi">3</span><span class="p" data-group-id="0334237736-2">}</span><span class="p" data-group-id="0334237736-1">)</span><span class="w"> </span><span class="gp unselectable">iex> </span><span class="nc">Stream</span><span class="o">.</span><span class="n">repeatedly</span><span class="p" data-group-id="0334237736-3">(</span><span class="o">&</span><span class="ss">:rand</span><span class="o">.</span><span class="n">uniform</span><span class="o">/</span><span class="mi">0</span><span class="p" data-group-id="0334237736-3">)</span><span class="w"> </span><span class="o">|></span><span class="w"> </span><span class="nc">Enum</span><span class="o">.</span><span class="n">take</span><span class="p" data-group-id="0334237736-4">(</span><span class="mi">3</span><span class="p" data-group-id="0334237736-4">)</span><span class="w"> </span><span class="p" data-group-id="0334237736-5">[</span><span class="mf">0.40502929729990744</span><span class="p">,</span><span class="w"> </span><span class="mf">0.45336720247823126</span><span class="p">,</span><span class="w"> </span><span class="mf">0.04094511692041057</span><span class="p" data-group-id="0334237736-5">]</span></code></pre> </section> </div> <div class="detail" id="resource/3"> <div class="detail-header"> <a href="#resource/3" class="detail-link" title="Link to this function"> <span class="icon-link" aria-hidden="true"></span> <span class="sr-only">Link to this function</span> </a> <span class="signature">resource(start_fun, next_fun, after_fun)</span> <a href="https://github.com/elixir-lang/elixir/blob/v1.7.2/lib/elixir/lib/stream.ex#L1361" class="view-source" rel="help" title="View Source"> <span class="icon-code" aria-hidden="true"></span> <span class="sr-only">View Source</span> </a> <div class="specs"> <pre>resource( (() -> <a href="#t:acc/0">acc</a>()), (<a href="#t:acc/0">acc</a>() -> {[<a href="#t:element/0">element</a>()], <a href="#t:acc/0">acc</a>()} | {:halt, <a href="#t:acc/0">acc</a>()}), (<a href="#t:acc/0">acc</a>() -> <a href="typespecs.html#built-in-types">term</a>()) ) :: <a href="Enumerable.html#t:t/0">Enumerable.t</a>()</pre> </div> </div> <section class="docstring"> <p>Emits a sequence of values for the given resource.</p> <p>Similar to <a href="#transform/3"><code class="inline">transform/3</code></a> but the initial accumulated value is computed lazily via <code class="inline">start_fun</code> and executes an <code class="inline">after_fun</code> at the end of enumeration (both in cases of success and failure).</p> <p>Successive values are generated by calling <code class="inline">next_fun</code> with the previous accumulator (the initial value being the result returned by <code class="inline">start_fun</code>) and it must return a tuple containing a list of items to be emitted and the next accumulator. The enumeration finishes if it returns <code class="inline">{:halt, acc}</code>.</p> <p>As the name says, this function is useful to stream values from resources.</p> <h2 id="resource/3-examples" class="section-heading"> <a href="#resource/3-examples" class="hover-link"><span class="icon-link" aria-hidden="true"></span></a> Examples </h2> <pre><code class="nohighlight makeup elixir"><span class="nc">Stream</span><span class="o">.</span><span class="n">resource</span><span class="p" data-group-id="4528659524-1">(</span><span class="k" data-group-id="4528659524-2">fn</span><span class="w"> </span><span class="o">-></span><span class="w"> </span><span class="nc">File</span><span class="o">.</span><span class="n">open!</span><span class="p" data-group-id="4528659524-3">(</span><span class="s">"sample"</span><span class="p" data-group-id="4528659524-3">)</span><span class="w"> </span><span class="k" data-group-id="4528659524-2">end</span><span class="p">,</span><span class="w"> </span><span class="k" data-group-id="4528659524-4">fn</span><span class="w"> </span><span class="n">file</span><span class="w"> </span><span class="o">-></span><span class="w"> </span><span class="k">case</span><span class="w"> </span><span class="nc">IO</span><span class="o">.</span><span class="n">read</span><span class="p" data-group-id="4528659524-5">(</span><span class="n">file</span><span class="p">,</span><span class="w"> </span><span class="ss">:line</span><span class="p" data-group-id="4528659524-5">)</span><span class="w"> </span><span class="k" data-group-id="4528659524-6">do</span><span class="w"> </span><span class="n">data</span><span class="w"> </span><span class="ow">when</span><span class="w"> </span><span class="n">is_binary</span><span class="p" data-group-id="4528659524-7">(</span><span class="n">data</span><span class="p" data-group-id="4528659524-7">)</span><span class="w"> </span><span class="o">-></span><span class="w"> </span><span class="p" data-group-id="4528659524-8">{</span><span class="p" data-group-id="4528659524-9">[</span><span class="n">data</span><span class="p" data-group-id="4528659524-9">]</span><span class="p">,</span><span class="w"> </span><span class="n">file</span><span class="p" data-group-id="4528659524-8">}</span><span class="w"> </span><span class="bp">_</span><span class="w"> </span><span class="o">-></span><span class="w"> </span><span class="p" data-group-id="4528659524-10">{</span><span class="ss">:halt</span><span class="p">,</span><span class="w"> </span><span class="n">file</span><span class="p" data-group-id="4528659524-10">}</span><span class="w"> </span><span class="k" data-group-id="4528659524-6">end</span><span class="w"> </span><span class="k" data-group-id="4528659524-4">end</span><span class="p">,</span><span class="w"> </span><span class="k" data-group-id="4528659524-11">fn</span><span class="w"> </span><span class="n">file</span><span class="w"> </span><span class="o">-></span><span class="w"> </span><span class="nc">File</span><span class="o">.</span><span class="n">close</span><span class="p" data-group-id="4528659524-12">(</span><span class="n">file</span><span class="p" data-group-id="4528659524-12">)</span><span class="w"> </span><span class="k" data-group-id="4528659524-11">end</span><span class="p" data-group-id="4528659524-1">)</span></code></pre> </section> </div> <div class="detail" id="run/1"> <div class="detail-header"> <a href="#run/1" class="detail-link" title="Link to this function"> <span class="icon-link" aria-hidden="true"></span> <span class="sr-only">Link to this function</span> </a> <span class="signature">run(stream)</span> <a href="https://github.com/elixir-lang/elixir/blob/v1.7.2/lib/elixir/lib/stream.ex#L636" class="view-source" rel="help" title="View Source"> <span class="icon-code" aria-hidden="true"></span> <span class="sr-only">View Source</span> </a> <div class="specs"> <pre>run(<a href="Enumerable.html#t:t/0">Enumerable.t</a>()) :: :ok</pre> </div> </div> <section class="docstring"> <p>Runs the given stream.</p> <p>This is useful when a stream needs to be run, for side effects, and there is no interest in its return result.</p> <h2 id="run/1-examples" class="section-heading"> <a href="#run/1-examples" class="hover-link"><span class="icon-link" aria-hidden="true"></span></a> Examples </h2> <p>Open up a file, replace all <code class="inline">#</code> by <code class="inline">%</code> and stream to another file without loading the whole file in memory:</p> <pre><code class="nohighlight makeup elixir"><span class="nc">File</span><span class="o">.</span><span class="n">stream!</span><span class="p" data-group-id="9021490285-1">(</span><span class="s">"/path/to/file"</span><span class="p" data-group-id="9021490285-1">)</span><span class="w"> </span><span class="o">|></span><span class="w"> </span><span class="nc">Stream</span><span class="o">.</span><span class="n">map</span><span class="p" data-group-id="9021490285-2">(</span><span class="o">&</span><span class="nc">String</span><span class="o">.</span><span class="n">replace</span><span class="p" data-group-id="9021490285-3">(</span><span class="ni">&1</span><span class="p">,</span><span class="w"> </span><span class="s">"#"</span><span class="p">,</span><span class="w"> </span><span class="s">"%"</span><span class="p" data-group-id="9021490285-3">)</span><span class="p" data-group-id="9021490285-2">)</span><span class="w"> </span><span class="o">|></span><span class="w"> </span><span class="nc">Stream</span><span class="o">.</span><span class="n">into</span><span class="p" data-group-id="9021490285-4">(</span><span class="nc">File</span><span class="o">.</span><span class="n">stream!</span><span class="p" data-group-id="9021490285-5">(</span><span class="s">"/path/to/other/file"</span><span class="p" data-group-id="9021490285-5">)</span><span class="p" data-group-id="9021490285-4">)</span><span class="w"> </span><span class="o">|></span><span class="w"> </span><span class="nc">Stream</span><span class="o">.</span><span class="n">run</span><span class="p" data-group-id="9021490285-6">(</span><span class="p" data-group-id="9021490285-6">)</span></code></pre> <p>No computation will be done until we call one of the <a href="Enum.html"><code class="inline">Enum</code></a> functions or <a href="#run/1"><code class="inline">run/1</code></a>.</p> </section> </div> <div class="detail" id="scan/2"> <div class="detail-header"> <a href="#scan/2" class="detail-link" title="Link to this function"> <span class="icon-link" aria-hidden="true"></span> <span class="sr-only">Link to this function</span> </a> <span class="signature">scan(enum, fun)</span> <a href="https://github.com/elixir-lang/elixir/blob/v1.7.2/lib/elixir/lib/stream.ex#L655" class="view-source" rel="help" title="View Source"> <span class="icon-code" aria-hidden="true"></span> <span class="sr-only">View Source</span> </a> <div class="specs"> <pre>scan(<a href="Enumerable.html#t:t/0">Enumerable.t</a>(), (<a href="#t:element/0">element</a>(), <a href="#t:acc/0">acc</a>() -> <a href="typespecs.html#basic-types">any</a>())) :: <a href="Enumerable.html#t:t/0">Enumerable.t</a>()</pre> </div> </div> <section class="docstring"> <p>Creates a stream that applies the given function to each element, emits the result and uses the same result as the accumulator for the next computation. Uses the first element in the enumerable as the starting value.</p> <h2 id="scan/2-examples" class="section-heading"> <a href="#scan/2-examples" class="hover-link"><span class="icon-link" aria-hidden="true"></span></a> Examples </h2> <pre><code class="nohighlight makeup elixir"><span class="gp unselectable">iex> </span><span class="n">stream</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nc">Stream</span><span class="o">.</span><span class="n">scan</span><span class="p" data-group-id="9475408782-1">(</span><span class="mi">1</span><span class="o">.</span><span class="o">.</span><span class="mi">5</span><span class="p">,</span><span class="w"> </span><span class="o">&</span><span class="p" data-group-id="9475408782-2">(</span><span class="ni">&1</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="ni">&2</span><span class="p" data-group-id="9475408782-2">)</span><span class="p" data-group-id="9475408782-1">)</span><span class="w"> </span><span class="gp unselectable">iex> </span><span class="nc">Enum</span><span class="o">.</span><span class="n">to_list</span><span class="p" data-group-id="9475408782-3">(</span><span class="n">stream</span><span class="p" data-group-id="9475408782-3">)</span><span class="w"> </span><span class="p" data-group-id="9475408782-4">[</span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="mi">3</span><span class="p">,</span><span class="w"> </span><span class="mi">6</span><span class="p">,</span><span class="w"> </span><span class="mi">10</span><span class="p">,</span><span class="w"> </span><span class="mi">15</span><span class="p" data-group-id="9475408782-4">]</span></code></pre> </section> </div> <div class="detail" id="scan/3"> <div class="detail-header"> <a href="#scan/3" class="detail-link" title="Link to this function"> <span class="icon-link" aria-hidden="true"></span> <span class="sr-only">Link to this function</span> </a> <span class="signature">scan(enum, acc, fun)</span> <a href="https://github.com/elixir-lang/elixir/blob/v1.7.2/lib/elixir/lib/stream.ex#L672" class="view-source" rel="help" title="View Source"> <span class="icon-code" aria-hidden="true"></span> <span class="sr-only">View Source</span> </a> <div class="specs"> <pre>scan(<a href="Enumerable.html#t:t/0">Enumerable.t</a>(), <a href="#t:acc/0">acc</a>(), (<a href="#t:element/0">element</a>(), <a href="#t:acc/0">acc</a>() -> <a href="typespecs.html#basic-types">any</a>())) :: <a href="Enumerable.html#t:t/0">Enumerable.t</a>()</pre> </div> </div> <section class="docstring"> <p>Creates a stream that applies the given function to each element, emits the result and uses the same result as the accumulator for the next computation. Uses the given <code class="inline">acc</code> as the starting value.</p> <h2 id="scan/3-examples" class="section-heading"> <a href="#scan/3-examples" class="hover-link"><span class="icon-link" aria-hidden="true"></span></a> Examples </h2> <pre><code class="nohighlight makeup elixir"><span class="gp unselectable">iex> </span><span class="n">stream</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nc">Stream</span><span class="o">.</span><span class="n">scan</span><span class="p" data-group-id="2434255243-1">(</span><span class="mi">1</span><span class="o">.</span><span class="o">.</span><span class="mi">5</span><span class="p">,</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> </span><span class="o">&</span><span class="p" data-group-id="2434255243-2">(</span><span class="ni">&1</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="ni">&2</span><span class="p" data-group-id="2434255243-2">)</span><span class="p" data-group-id="2434255243-1">)</span><span class="w"> </span><span class="gp unselectable">iex> </span><span class="nc">Enum</span><span class="o">.</span><span class="n">to_list</span><span class="p" data-group-id="2434255243-3">(</span><span class="n">stream</span><span class="p" data-group-id="2434255243-3">)</span><span class="w"> </span><span class="p" data-group-id="2434255243-4">[</span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="mi">3</span><span class="p">,</span><span class="w"> </span><span class="mi">6</span><span class="p">,</span><span class="w"> </span><span class="mi">10</span><span class="p">,</span><span class="w"> </span><span class="mi">15</span><span class="p" data-group-id="2434255243-4">]</span></code></pre> </section> </div> <div class="detail" id="take/2"> <div class="detail-header"> <a href="#take/2" class="detail-link" title="Link to this function"> <span class="icon-link" aria-hidden="true"></span> <span class="sr-only">Link to this function</span> </a> <span class="signature">take(enum, count)</span> <a href="https://github.com/elixir-lang/elixir/blob/v1.7.2/lib/elixir/lib/stream.ex#L709" class="view-source" rel="help" title="View Source"> <span class="icon-code" aria-hidden="true"></span> <span class="sr-only">View Source</span> </a> <div class="specs"> <pre>take(<a href="Enumerable.html#t:t/0">Enumerable.t</a>(), <a href="typespecs.html#basic-types">integer</a>()) :: <a href="Enumerable.html#t:t/0">Enumerable.t</a>()</pre> </div> </div> <section class="docstring"> <p>Lazily takes the next <code class="inline">count</code> items from the enumerable and stops enumeration.</p> <p>If a negative <code class="inline">count</code> is given, the last <code class="inline">count</code> values will be taken. For such, the collection is fully enumerated keeping up to <code class="inline">2 * count</code> elements in memory. Once the end of the collection is reached, the last <code class="inline">count</code> elements will be executed. Therefore, using a negative <code class="inline">count</code> on an infinite collection will never return.</p> <h2 id="take/2-examples" class="section-heading"> <a href="#take/2-examples" class="hover-link"><span class="icon-link" aria-hidden="true"></span></a> Examples </h2> <pre><code class="nohighlight makeup elixir"><span class="gp unselectable">iex> </span><span class="n">stream</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nc">Stream</span><span class="o">.</span><span class="n">take</span><span class="p" data-group-id="5786256001-1">(</span><span class="mi">1</span><span class="o">.</span><span class="o">.</span><span class="mi">100</span><span class="p">,</span><span class="w"> </span><span class="mi">5</span><span class="p" data-group-id="5786256001-1">)</span><span class="w"> </span><span class="gp unselectable">iex> </span><span class="nc">Enum</span><span class="o">.</span><span class="n">to_list</span><span class="p" data-group-id="5786256001-2">(</span><span class="n">stream</span><span class="p" data-group-id="5786256001-2">)</span><span class="w"> </span><span class="p" data-group-id="5786256001-3">[</span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="mi">2</span><span class="p">,</span><span class="w"> </span><span class="mi">3</span><span class="p">,</span><span class="w"> </span><span class="mi">4</span><span class="p">,</span><span class="w"> </span><span class="mi">5</span><span class="p" data-group-id="5786256001-3">]</span><span class="w"> </span><span class="gp unselectable">iex> </span><span class="n">stream</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nc">Stream</span><span class="o">.</span><span class="n">take</span><span class="p" data-group-id="5786256001-4">(</span><span class="mi">1</span><span class="o">.</span><span class="o">.</span><span class="mi">100</span><span class="p">,</span><span class="w"> </span><span class="o">-</span><span class="mi">5</span><span class="p" data-group-id="5786256001-4">)</span><span class="w"> </span><span class="gp unselectable">iex> </span><span class="nc">Enum</span><span class="o">.</span><span class="n">to_list</span><span class="p" data-group-id="5786256001-5">(</span><span class="n">stream</span><span class="p" data-group-id="5786256001-5">)</span><span class="w"> </span><span class="p" data-group-id="5786256001-6">[</span><span class="mi">96</span><span class="p">,</span><span class="w"> </span><span class="mi">97</span><span class="p">,</span><span class="w"> </span><span class="mi">98</span><span class="p">,</span><span class="w"> </span><span class="mi">99</span><span class="p">,</span><span class="w"> </span><span class="mi">100</span><span class="p" data-group-id="5786256001-6">]</span><span class="w"> </span><span class="gp unselectable">iex> </span><span class="n">stream</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nc">Stream</span><span class="o">.</span><span class="n">cycle</span><span class="p" data-group-id="5786256001-7">(</span><span class="p" data-group-id="5786256001-8">[</span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="mi">2</span><span class="p">,</span><span class="w"> </span><span class="mi">3</span><span class="p" data-group-id="5786256001-8">]</span><span class="p" data-group-id="5786256001-7">)</span><span class="w"> </span><span class="o">|></span><span class="w"> </span><span class="nc">Stream</span><span class="o">.</span><span class="n">take</span><span class="p" data-group-id="5786256001-9">(</span><span class="mi">5</span><span class="p" data-group-id="5786256001-9">)</span><span class="w"> </span><span class="gp unselectable">iex> </span><span class="nc">Enum</span><span class="o">.</span><span class="n">to_list</span><span class="p" data-group-id="5786256001-10">(</span><span class="n">stream</span><span class="p" data-group-id="5786256001-10">)</span><span class="w"> </span><span class="p" data-group-id="5786256001-11">[</span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="mi">2</span><span class="p">,</span><span class="w"> </span><span class="mi">3</span><span class="p">,</span><span class="w"> </span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="mi">2</span><span class="p" data-group-id="5786256001-11">]</span></code></pre> </section> </div> <div class="detail" id="take_every/2"> <div class="detail-header"> <a href="#take_every/2" class="detail-link" title="Link to this function"> <span class="icon-link" aria-hidden="true"></span> <span class="sr-only">Link to this function</span> </a> <span class="signature">take_every(enum, nth)</span> <a href="https://github.com/elixir-lang/elixir/blob/v1.7.2/lib/elixir/lib/stream.ex#L740" class="view-source" rel="help" title="View Source"> <span class="icon-code" aria-hidden="true"></span> <span class="sr-only">View Source</span> </a> <div class="specs"> <pre>take_every(<a href="Enumerable.html#t:t/0">Enumerable.t</a>(), <a href="typespecs.html#basic-types">non_neg_integer</a>()) :: <a href="Enumerable.html#t:t/0">Enumerable.t</a>()</pre> </div> </div> <section class="docstring"> <p>Creates a stream that takes every <code class="inline">nth</code> item from the enumerable.</p> <p>The first item is always included, unless <code class="inline">nth</code> is 0.</p> <p><code class="inline">nth</code> must be a non-negative integer.</p> <h2 id="take_every/2-examples" class="section-heading"> <a href="#take_every/2-examples" class="hover-link"><span class="icon-link" aria-hidden="true"></span></a> Examples </h2> <pre><code class="nohighlight makeup elixir"><span class="gp unselectable">iex> </span><span class="n">stream</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nc">Stream</span><span class="o">.</span><span class="n">take_every</span><span class="p" data-group-id="0076492274-1">(</span><span class="mi">1</span><span class="o">.</span><span class="o">.</span><span class="mi">10</span><span class="p">,</span><span class="w"> </span><span class="mi">2</span><span class="p" data-group-id="0076492274-1">)</span><span class="w"> </span><span class="gp unselectable">iex> </span><span class="nc">Enum</span><span class="o">.</span><span class="n">to_list</span><span class="p" data-group-id="0076492274-2">(</span><span class="n">stream</span><span class="p" data-group-id="0076492274-2">)</span><span class="w"> </span><span class="p" data-group-id="0076492274-3">[</span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="mi">3</span><span class="p">,</span><span class="w"> </span><span class="mi">5</span><span class="p">,</span><span class="w"> </span><span class="mi">7</span><span class="p">,</span><span class="w"> </span><span class="mi">9</span><span class="p" data-group-id="0076492274-3">]</span><span class="w"> </span><span class="gp unselectable">iex> </span><span class="n">stream</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nc">Stream</span><span class="o">.</span><span class="n">take_every</span><span class="p" data-group-id="0076492274-4">(</span><span class="p" data-group-id="0076492274-5">[</span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="mi">2</span><span class="p">,</span><span class="w"> </span><span class="mi">3</span><span class="p">,</span><span class="w"> </span><span class="mi">4</span><span class="p">,</span><span class="w"> </span><span class="mi">5</span><span class="p" data-group-id="0076492274-5">]</span><span class="p">,</span><span class="w"> </span><span class="mi">1</span><span class="p" data-group-id="0076492274-4">)</span><span class="w"> </span><span class="gp unselectable">iex> </span><span class="nc">Enum</span><span class="o">.</span><span class="n">to_list</span><span class="p" data-group-id="0076492274-6">(</span><span class="n">stream</span><span class="p" data-group-id="0076492274-6">)</span><span class="w"> </span><span class="p" data-group-id="0076492274-7">[</span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="mi">2</span><span class="p">,</span><span class="w"> </span><span class="mi">3</span><span class="p">,</span><span class="w"> </span><span class="mi">4</span><span class="p">,</span><span class="w"> </span><span class="mi">5</span><span class="p" data-group-id="0076492274-7">]</span><span class="w"> </span><span class="gp unselectable">iex> </span><span class="n">stream</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nc">Stream</span><span class="o">.</span><span class="n">take_every</span><span class="p" data-group-id="0076492274-8">(</span><span class="mi">1</span><span class="o">.</span><span class="o">.</span><span class="mi">1000</span><span class="p">,</span><span class="w"> </span><span class="mi">0</span><span class="p" data-group-id="0076492274-8">)</span><span class="w"> </span><span class="gp unselectable">iex> </span><span class="nc">Enum</span><span class="o">.</span><span class="n">to_list</span><span class="p" data-group-id="0076492274-9">(</span><span class="n">stream</span><span class="p" data-group-id="0076492274-9">)</span><span class="w"> </span><span class="p" data-group-id="0076492274-10">[</span><span class="p" data-group-id="0076492274-10">]</span></code></pre> </section> </div> <div class="detail" id="take_while/2"> <div class="detail-header"> <a href="#take_while/2" class="detail-link" title="Link to this function"> <span class="icon-link" aria-hidden="true"></span> <span class="sr-only">Link to this function</span> </a> <span class="signature">take_while(enum, fun)</span> <a href="https://github.com/elixir-lang/elixir/blob/v1.7.2/lib/elixir/lib/stream.ex#L756" class="view-source" rel="help" title="View Source"> <span class="icon-code" aria-hidden="true"></span> <span class="sr-only">View Source</span> </a> <div class="specs"> <pre>take_while(<a href="Enumerable.html#t:t/0">Enumerable.t</a>(), (<a href="#t:element/0">element</a>() -> <a href="typespecs.html#built-in-types">as_boolean</a>(<a href="typespecs.html#built-in-types">term</a>()))) :: <a href="Enumerable.html#t:t/0">Enumerable.t</a>()</pre> </div> </div> <section class="docstring"> <p>Lazily takes elements of the enumerable while the given function returns a truthy value.</p> <h2 id="take_while/2-examples" class="section-heading"> <a href="#take_while/2-examples" class="hover-link"><span class="icon-link" aria-hidden="true"></span></a> Examples </h2> <pre><code class="nohighlight makeup elixir"><span class="gp unselectable">iex> </span><span class="n">stream</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nc">Stream</span><span class="o">.</span><span class="n">take_while</span><span class="p" data-group-id="9368747115-1">(</span><span class="mi">1</span><span class="o">.</span><span class="o">.</span><span class="mi">100</span><span class="p">,</span><span class="w"> </span><span class="o">&</span><span class="p" data-group-id="9368747115-2">(</span><span class="ni">&1</span><span class="w"> </span><span class="o"><=</span><span class="w"> </span><span class="mi">5</span><span class="p" data-group-id="9368747115-2">)</span><span class="p" data-group-id="9368747115-1">)</span><span class="w"> </span><span class="gp unselectable">iex> </span><span class="nc">Enum</span><span class="o">.</span><span class="n">to_list</span><span class="p" data-group-id="9368747115-3">(</span><span class="n">stream</span><span class="p" data-group-id="9368747115-3">)</span><span class="w"> </span><span class="p" data-group-id="9368747115-4">[</span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="mi">2</span><span class="p">,</span><span class="w"> </span><span class="mi">3</span><span class="p">,</span><span class="w"> </span><span class="mi">4</span><span class="p">,</span><span class="w"> </span><span class="mi">5</span><span class="p" data-group-id="9368747115-4">]</span></code></pre> </section> </div> <div class="detail" id="timer/1"> <div class="detail-header"> <a href="#timer/1" class="detail-link" title="Link to this function"> <span class="icon-link" aria-hidden="true"></span> <span class="sr-only">Link to this function</span> </a> <span class="signature">timer(n)</span> <a href="https://github.com/elixir-lang/elixir/blob/v1.7.2/lib/elixir/lib/stream.ex#L773" class="view-source" rel="help" title="View Source"> <span class="icon-code" aria-hidden="true"></span> <span class="sr-only">View Source</span> </a> <div class="specs"> <pre>timer(<a href="typespecs.html#basic-types">non_neg_integer</a>()) :: <a href="Enumerable.html#t:t/0">Enumerable.t</a>()</pre> </div> </div> <section class="docstring"> <p>Creates a stream that emits a single value after <code class="inline">n</code> milliseconds.</p> <p>The value emitted is <code class="inline">0</code>. This operation will block the caller by the given time until the item is streamed.</p> <h2 id="timer/1-examples" class="section-heading"> <a href="#timer/1-examples" class="hover-link"><span class="icon-link" aria-hidden="true"></span></a> Examples </h2> <pre><code class="nohighlight makeup elixir"><span class="gp unselectable">iex> </span><span class="nc">Stream</span><span class="o">.</span><span class="n">timer</span><span class="p" data-group-id="3777574416-1">(</span><span class="mi">10</span><span class="p" data-group-id="3777574416-1">)</span><span class="w"> </span><span class="o">|></span><span class="w"> </span><span class="nc">Enum</span><span class="o">.</span><span class="n">to_list</span><span class="p" data-group-id="3777574416-2">(</span><span class="p" data-group-id="3777574416-2">)</span><span class="w"> </span><span class="p" data-group-id="3777574416-3">[</span><span class="mi">0</span><span class="p" data-group-id="3777574416-3">]</span></code></pre> </section> </div> <div class="detail" id="transform/3"> <div class="detail-header"> <a href="#transform/3" class="detail-link" title="Link to this function"> <span class="icon-link" aria-hidden="true"></span> <span class="sr-only">Link to this function</span> </a> <span class="signature">transform(enum, acc, reducer)</span> <a href="https://github.com/elixir-lang/elixir/blob/v1.7.2/lib/elixir/lib/stream.ex#L807" class="view-source" rel="help" title="View Source"> <span class="icon-code" aria-hidden="true"></span> <span class="sr-only">View Source</span> </a> <div class="specs"> <pre>transform(<a href="Enumerable.html#t:t/0">Enumerable.t</a>(), acc, fun) :: <a href="Enumerable.html#t:t/0">Enumerable.t</a>() when fun: (<a href="#t:element/0">element</a>(), acc -> {<a href="Enumerable.html#t:t/0">Enumerable.t</a>(), acc} | {:halt, acc}), acc: <a href="typespecs.html#basic-types">any</a>()</pre> </div> </div> <section class="docstring"> <p>Transforms an existing stream.</p> <p>It expects an accumulator and a function that receives each stream item and an accumulator, and must return a tuple containing a new stream (often a list) with the new accumulator or a tuple with <code class="inline">:halt</code> as first element and the accumulator as second.</p> <p>Note: this function is similar to <a href="Enum.html#flat_map_reduce/3"><code class="inline">Enum.flat_map_reduce/3</code></a> except the latter returns both the flat list and accumulator, while this one returns only the stream.</p> <h2 id="transform/3-examples" class="section-heading"> <a href="#transform/3-examples" class="hover-link"><span class="icon-link" aria-hidden="true"></span></a> Examples </h2> <p><a href="Stream.html#transform/3"><code class="inline">Stream.transform/3</code></a> is useful as it can be used as the basis to implement many of the functions defined in this module. For example, we can implement <code class="inline">Stream.take(enum, n)</code> as follows:</p> <pre><code class="nohighlight makeup elixir"><span class="gp unselectable">iex> </span><span class="n">enum</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">1</span><span class="o">.</span><span class="o">.</span><span class="mi">100</span><span class="w"> </span><span class="gp unselectable">iex> </span><span class="n">n</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">3</span><span class="w"> </span><span class="gp unselectable">iex> </span><span class="n">stream</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nc">Stream</span><span class="o">.</span><span class="n">transform</span><span class="p" data-group-id="8215823256-1">(</span><span class="n">enum</span><span class="p">,</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> </span><span class="k" data-group-id="8215823256-2">fn</span><span class="w"> </span><span class="n">i</span><span class="p">,</span><span class="w"> </span><span class="n">acc</span><span class="w"> </span><span class="o">-></span><span class="w"> </span><span class="gp unselectable">...> </span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">acc</span><span class="w"> </span><span class="o"><</span><span class="w"> </span><span class="n">n</span><span class="p">,</span><span class="w"> </span><span class="ss">do</span><span class="p">:</span><span class="w"> </span><span class="p" data-group-id="8215823256-3">{</span><span class="p" data-group-id="8215823256-4">[</span><span class="n">i</span><span class="p" data-group-id="8215823256-4">]</span><span class="p">,</span><span class="w"> </span><span class="n">acc</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="mi">1</span><span class="p" data-group-id="8215823256-3">}</span><span class="p">,</span><span class="w"> </span><span class="ss">else</span><span class="p">:</span><span class="w"> </span><span class="p" data-group-id="8215823256-5">{</span><span class="ss">:halt</span><span class="p">,</span><span class="w"> </span><span class="n">acc</span><span class="p" data-group-id="8215823256-5">}</span><span class="w"> </span><span class="gp unselectable">...> </span><span class="k" data-group-id="8215823256-2">end</span><span class="p" data-group-id="8215823256-1">)</span><span class="w"> </span><span class="gp unselectable">iex> </span><span class="nc">Enum</span><span class="o">.</span><span class="n">to_list</span><span class="p" data-group-id="8215823256-6">(</span><span class="n">stream</span><span class="p" data-group-id="8215823256-6">)</span><span class="w"> </span><span class="p" data-group-id="8215823256-7">[</span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="mi">2</span><span class="p">,</span><span class="w"> </span><span class="mi">3</span><span class="p" data-group-id="8215823256-7">]</span></code></pre> </section> </div> <div class="detail" id="transform/4"> <div class="detail-header"> <a href="#transform/4" class="detail-link" title="Link to this function"> <span class="icon-link" aria-hidden="true"></span> <span class="sr-only">Link to this function</span> </a> <span class="signature">transform(enum, start_fun, reducer, after_fun)</span> <a href="https://github.com/elixir-lang/elixir/blob/v1.7.2/lib/elixir/lib/stream.ex#L824" class="view-source" rel="help" title="View Source"> <span class="icon-code" aria-hidden="true"></span> <span class="sr-only">View Source</span> </a> <div class="specs"> <pre>transform(<a href="Enumerable.html#t:t/0">Enumerable.t</a>(), (() -> acc), fun, (acc -> <a href="typespecs.html#built-in-types">term</a>())) :: <a href="Enumerable.html#t:t/0">Enumerable.t</a>() when fun: (<a href="#t:element/0">element</a>(), acc -> {<a href="Enumerable.html#t:t/0">Enumerable.t</a>(), acc} | {:halt, acc}), acc: <a href="typespecs.html#basic-types">any</a>()</pre> </div> </div> <section class="docstring"> <p>Transforms an existing stream with function-based start and finish.</p> <p>The accumulator is only calculated when transformation starts. It also allows an after function to be given which is invoked when the stream halts or completes.</p> <p>This function can be seen as a combination of <a href="Stream.html#resource/3"><code class="inline">Stream.resource/3</code></a> with <a href="Stream.html#transform/3"><code class="inline">Stream.transform/3</code></a>.</p> </section> </div> <div class="detail" id="unfold/2"> <div class="detail-header"> <a href="#unfold/2" class="detail-link" title="Link to this function"> <span class="icon-link" aria-hidden="true"></span> <span class="sr-only">Link to this function</span> </a> <span class="signature">unfold(next_acc, next_fun)</span> <a href="https://github.com/elixir-lang/elixir/blob/v1.7.2/lib/elixir/lib/stream.ex#L1469" class="view-source" rel="help" title="View Source"> <span class="icon-code" aria-hidden="true"></span> <span class="sr-only">View Source</span> </a> <div class="specs"> <pre>unfold(<a href="#t:acc/0">acc</a>(), (<a href="#t:acc/0">acc</a>() -> {<a href="#t:element/0">element</a>(), <a href="#t:acc/0">acc</a>()} | nil)) :: <a href="Enumerable.html#t:t/0">Enumerable.t</a>()</pre> </div> </div> <section class="docstring"> <p>Emits a sequence of values for the given accumulator.</p> <p>Successive values are generated by calling <code class="inline">next_fun</code> with the previous accumulator and it must return a tuple with the current value and next accumulator. The enumeration finishes if it returns <code class="inline">nil</code>.</p> <h2 id="unfold/2-examples" class="section-heading"> <a href="#unfold/2-examples" class="hover-link"><span class="icon-link" aria-hidden="true"></span></a> Examples </h2> <pre><code class="nohighlight makeup elixir"><span class="gp unselectable">iex> </span><span class="nc">Stream</span><span class="o">.</span><span class="n">unfold</span><span class="p" data-group-id="7233169570-1">(</span><span class="mi">5</span><span class="p">,</span><span class="w"> </span><span class="k" data-group-id="7233169570-2">fn</span><span class="w"> </span><span class="gp unselectable">...> </span><span class="w"> </span><span class="mi">0</span><span class="w"> </span><span class="o">-></span><span class="w"> </span><span class="no">nil</span><span class="w"> </span><span class="gp unselectable">...> </span><span class="w"> </span><span class="n">n</span><span class="w"> </span><span class="o">-></span><span class="w"> </span><span class="p" data-group-id="7233169570-3">{</span><span class="n">n</span><span class="p">,</span><span class="w"> </span><span class="n">n</span><span class="w"> </span><span class="o">-</span><span class="w"> </span><span class="mi">1</span><span class="p" data-group-id="7233169570-3">}</span><span class="w"> </span><span class="gp unselectable">...> </span><span class="k" data-group-id="7233169570-2">end</span><span class="p" data-group-id="7233169570-1">)</span><span class="w"> </span><span class="o">|></span><span class="w"> </span><span class="nc">Enum</span><span class="o">.</span><span class="n">to_list</span><span class="p" data-group-id="7233169570-4">(</span><span class="p" data-group-id="7233169570-4">)</span><span class="w"> </span><span class="p" data-group-id="7233169570-5">[</span><span class="mi">5</span><span class="p">,</span><span class="w"> </span><span class="mi">4</span><span class="p">,</span><span class="w"> </span><span class="mi">3</span><span class="p">,</span><span class="w"> </span><span class="mi">2</span><span class="p">,</span><span class="w"> </span><span class="mi">1</span><span class="p" data-group-id="7233169570-5">]</span></code></pre> </section> </div> <div class="detail" id="uniq/1"> <div class="detail-header"> <a href="#uniq/1" class="detail-link" title="Link to this function"> <span class="icon-link" aria-hidden="true"></span> <span class="sr-only">Link to this function</span> </a> <span class="signature">uniq(enum)</span> <a href="https://github.com/elixir-lang/elixir/blob/v1.7.2/lib/elixir/lib/stream.ex#L988" class="view-source" rel="help" title="View Source"> <span class="icon-code" aria-hidden="true"></span> <span class="sr-only">View Source</span> </a> <div class="specs"> <pre>uniq(<a href="Enumerable.html#t:t/0">Enumerable.t</a>()) :: <a href="Enumerable.html#t:t/0">Enumerable.t</a>()</pre> </div> </div> <section class="docstring"> <p>Creates a stream that only emits elements if they are unique.</p> <p>Keep in mind that, in order to know if an element is unique or not, this function needs to store all unique values emitted by the stream. Therefore, if the stream is infinite, the number of items stored will grow infinitely, never being garbage-collected.</p> <h2 id="uniq/1-examples" class="section-heading"> <a href="#uniq/1-examples" class="hover-link"><span class="icon-link" aria-hidden="true"></span></a> Examples </h2> <pre><code class="nohighlight makeup elixir"><span class="gp unselectable">iex> </span><span class="nc">Stream</span><span class="o">.</span><span class="n">uniq</span><span class="p" data-group-id="2314228764-1">(</span><span class="p" data-group-id="2314228764-2">[</span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="mi">2</span><span class="p">,</span><span class="w"> </span><span class="mi">3</span><span class="p">,</span><span class="w"> </span><span class="mi">3</span><span class="p">,</span><span class="w"> </span><span class="mi">2</span><span class="p">,</span><span class="w"> </span><span class="mi">1</span><span class="p" data-group-id="2314228764-2">]</span><span class="p" data-group-id="2314228764-1">)</span><span class="w"> </span><span class="o">|></span><span class="w"> </span><span class="nc">Enum</span><span class="o">.</span><span class="n">to_list</span><span class="p" data-group-id="2314228764-3">(</span><span class="p" data-group-id="2314228764-3">)</span><span class="w"> </span><span class="p" data-group-id="2314228764-4">[</span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="mi">2</span><span class="p">,</span><span class="w"> </span><span class="mi">3</span><span class="p" data-group-id="2314228764-4">]</span></code></pre> </section> </div> <div class="detail" id="uniq_by/2"> <div class="detail-header"> <a href="#uniq_by/2" class="detail-link" title="Link to this function"> <span class="icon-link" aria-hidden="true"></span> <span class="sr-only">Link to this function</span> </a> <span class="signature">uniq_by(enum, fun)</span> <a href="https://github.com/elixir-lang/elixir/blob/v1.7.2/lib/elixir/lib/stream.ex#L1021" class="view-source" rel="help" title="View Source"> <span class="icon-code" aria-hidden="true"></span> <span class="sr-only">View Source</span> </a> <div class="specs"> <pre>uniq_by(<a href="Enumerable.html#t:t/0">Enumerable.t</a>(), (<a href="#t:element/0">element</a>() -> <a href="typespecs.html#built-in-types">term</a>())) :: <a href="Enumerable.html#t:t/0">Enumerable.t</a>()</pre> </div> </div> <section class="docstring"> <p>Creates a stream that only emits elements if they are unique, by removing the elements for which function <code class="inline">fun</code> returned duplicate items.</p> <p>The function <code class="inline">fun</code> maps every element to a term which is used to determine if two elements are duplicates.</p> <p>Keep in mind that, in order to know if an element is unique or not, this function needs to store all unique values emitted by the stream. Therefore, if the stream is infinite, the number of items stored will grow infinitely, never being garbage-collected.</p> <h2 id="uniq_by/2-example" class="section-heading"> <a href="#uniq_by/2-example" class="hover-link"><span class="icon-link" aria-hidden="true"></span></a> Example </h2> <pre><code class="nohighlight makeup elixir"><span class="gp unselectable">iex> </span><span class="nc">Stream</span><span class="o">.</span><span class="n">uniq_by</span><span class="p" data-group-id="3952243379-1">(</span><span class="p" data-group-id="3952243379-2">[</span><span class="p" data-group-id="3952243379-3">{</span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="ss">:x</span><span class="p" data-group-id="3952243379-3">}</span><span class="p">,</span><span class="w"> </span><span class="p" data-group-id="3952243379-4">{</span><span class="mi">2</span><span class="p">,</span><span class="w"> </span><span class="ss">:y</span><span class="p" data-group-id="3952243379-4">}</span><span class="p">,</span><span class="w"> </span><span class="p" data-group-id="3952243379-5">{</span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="ss">:z</span><span class="p" data-group-id="3952243379-5">}</span><span class="p" data-group-id="3952243379-2">]</span><span class="p">,</span><span class="w"> </span><span class="k" data-group-id="3952243379-6">fn</span><span class="w"> </span><span class="p" data-group-id="3952243379-7">{</span><span class="n">x</span><span class="p">,</span><span class="w"> </span><span class="bp">_</span><span class="p" data-group-id="3952243379-7">}</span><span class="w"> </span><span class="o">-></span><span class="w"> </span><span class="n">x</span><span class="w"> </span><span class="k" data-group-id="3952243379-6">end</span><span class="p" data-group-id="3952243379-1">)</span><span class="w"> </span><span class="o">|></span><span class="w"> </span><span class="nc">Enum</span><span class="o">.</span><span class="n">to_list</span><span class="p" data-group-id="3952243379-8">(</span><span class="p" data-group-id="3952243379-8">)</span><span class="w"> </span><span class="p" data-group-id="3952243379-9">[</span><span class="p" data-group-id="3952243379-10">{</span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="ss">:x</span><span class="p" data-group-id="3952243379-10">}</span><span class="p">,</span><span class="w"> </span><span class="p" data-group-id="3952243379-11">{</span><span class="mi">2</span><span class="p">,</span><span class="w"> </span><span class="ss">:y</span><span class="p" data-group-id="3952243379-11">}</span><span class="p" data-group-id="3952243379-9">]</span><span class="w"> </span><span class="gp unselectable">iex> </span><span class="nc">Stream</span><span class="o">.</span><span class="n">uniq_by</span><span class="p" data-group-id="3952243379-12">(</span><span class="p" data-group-id="3952243379-13">[</span><span class="ss">a</span><span class="p">:</span><span class="w"> </span><span class="p" data-group-id="3952243379-14">{</span><span class="ss">:tea</span><span class="p">,</span><span class="w"> </span><span class="mi">2</span><span class="p" data-group-id="3952243379-14">}</span><span class="p">,</span><span class="w"> </span><span class="ss">b</span><span class="p">:</span><span class="w"> </span><span class="p" data-group-id="3952243379-15">{</span><span class="ss">:tea</span><span class="p">,</span><span class="w"> </span><span class="mi">2</span><span class="p" data-group-id="3952243379-15">}</span><span class="p">,</span><span class="w"> </span><span class="ss">c</span><span class="p">:</span><span class="w"> </span><span class="p" data-group-id="3952243379-16">{</span><span class="ss">:coffee</span><span class="p">,</span><span class="w"> </span><span class="mi">1</span><span class="p" data-group-id="3952243379-16">}</span><span class="p" data-group-id="3952243379-13">]</span><span class="p">,</span><span class="w"> </span><span class="k" data-group-id="3952243379-17">fn</span><span class="w"> </span><span class="p" data-group-id="3952243379-18">{</span><span class="bp">_</span><span class="p">,</span><span class="w"> </span><span class="n">y</span><span class="p" data-group-id="3952243379-18">}</span><span class="w"> </span><span class="o">-></span><span class="w"> </span><span class="n">y</span><span class="w"> </span><span class="k" data-group-id="3952243379-17">end</span><span class="p" data-group-id="3952243379-12">)</span><span class="w"> </span><span class="o">|></span><span class="w"> </span><span class="nc">Enum</span><span class="o">.</span><span class="n">to_list</span><span class="p" data-group-id="3952243379-19">(</span><span class="p" data-group-id="3952243379-19">)</span><span class="w"> </span><span class="p" data-group-id="3952243379-20">[</span><span class="ss">a</span><span class="p">:</span><span class="w"> </span><span class="p" data-group-id="3952243379-21">{</span><span class="ss">:tea</span><span class="p">,</span><span class="w"> </span><span class="mi">2</span><span class="p" data-group-id="3952243379-21">}</span><span class="p">,</span><span class="w"> </span><span class="ss">c</span><span class="p">:</span><span class="w"> </span><span class="p" data-group-id="3952243379-22">{</span><span class="ss">:coffee</span><span class="p">,</span><span class="w"> </span><span class="mi">1</span><span class="p" data-group-id="3952243379-22">}</span><span class="p" data-group-id="3952243379-20">]</span></code></pre> </section> </div> <div class="detail" id="with_index/2"> <span id="with_index/1"></span> <div class="detail-header"> <a href="#with_index/2" class="detail-link" title="Link to this function"> <span class="icon-link" aria-hidden="true"></span> <span class="sr-only">Link to this function</span> </a> <span class="signature">with_index(enum, offset \\ 0)</span> <a href="https://github.com/elixir-lang/elixir/blob/v1.7.2/lib/elixir/lib/stream.ex#L1043" class="view-source" rel="help" title="View Source"> <span class="icon-code" aria-hidden="true"></span> <span class="sr-only">View Source</span> </a> <div class="specs"> <pre>with_index(<a href="Enumerable.html#t:t/0">Enumerable.t</a>(), <a href="typespecs.html#basic-types">integer</a>()) :: <a href="Enumerable.html#t:t/0">Enumerable.t</a>()</pre> </div> </div> <section class="docstring"> <p>Creates a stream where each item in the enumerable will be wrapped in a tuple alongside its index.</p> <p>If an <code class="inline">offset</code> is given, we will index from the given offset instead of from zero.</p> <h2 id="with_index/2-examples" class="section-heading"> <a href="#with_index/2-examples" class="hover-link"><span class="icon-link" aria-hidden="true"></span></a> Examples </h2> <pre><code class="nohighlight makeup elixir"><span class="gp unselectable">iex> </span><span class="n">stream</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nc">Stream</span><span class="o">.</span><span class="n">with_index</span><span class="p" data-group-id="4705086468-1">(</span><span class="p" data-group-id="4705086468-2">[</span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="mi">2</span><span class="p">,</span><span class="w"> </span><span class="mi">3</span><span class="p" data-group-id="4705086468-2">]</span><span class="p" data-group-id="4705086468-1">)</span><span class="w"> </span><span class="gp unselectable">iex> </span><span class="nc">Enum</span><span class="o">.</span><span class="n">to_list</span><span class="p" data-group-id="4705086468-3">(</span><span class="n">stream</span><span class="p" data-group-id="4705086468-3">)</span><span class="w"> </span><span class="p" data-group-id="4705086468-4">[</span><span class="p" data-group-id="4705086468-5">{</span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="mi">0</span><span class="p" data-group-id="4705086468-5">}</span><span class="p">,</span><span class="w"> </span><span class="p" data-group-id="4705086468-6">{</span><span class="mi">2</span><span class="p">,</span><span class="w"> </span><span class="mi">1</span><span class="p" data-group-id="4705086468-6">}</span><span class="p">,</span><span class="w"> </span><span class="p" data-group-id="4705086468-7">{</span><span class="mi">3</span><span class="p">,</span><span class="w"> </span><span class="mi">2</span><span class="p" data-group-id="4705086468-7">}</span><span class="p" data-group-id="4705086468-4">]</span><span class="w"> </span><span class="gp unselectable">iex> </span><span class="n">stream</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nc">Stream</span><span class="o">.</span><span class="n">with_index</span><span class="p" data-group-id="4705086468-8">(</span><span class="p" data-group-id="4705086468-9">[</span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="mi">2</span><span class="p">,</span><span class="w"> </span><span class="mi">3</span><span class="p" data-group-id="4705086468-9">]</span><span class="p">,</span><span class="w"> </span><span class="mi">3</span><span class="p" data-group-id="4705086468-8">)</span><span class="w"> </span><span class="gp unselectable">iex> </span><span class="nc">Enum</span><span class="o">.</span><span class="n">to_list</span><span class="p" data-group-id="4705086468-10">(</span><span class="n">stream</span><span class="p" data-group-id="4705086468-10">)</span><span class="w"> </span><span class="p" data-group-id="4705086468-11">[</span><span class="p" data-group-id="4705086468-12">{</span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="mi">3</span><span class="p" data-group-id="4705086468-12">}</span><span class="p">,</span><span class="w"> </span><span class="p" data-group-id="4705086468-13">{</span><span class="mi">2</span><span class="p">,</span><span class="w"> </span><span class="mi">4</span><span class="p" data-group-id="4705086468-13">}</span><span class="p">,</span><span class="w"> </span><span class="p" data-group-id="4705086468-14">{</span><span class="mi">3</span><span class="p">,</span><span class="w"> </span><span class="mi">5</span><span class="p" data-group-id="4705086468-14">}</span><span class="p" data-group-id="4705086468-11">]</span></code></pre> </section> </div> <div class="detail" id="zip/1"> <div class="detail-header"> <a href="#zip/1" class="detail-link" title="Link to this function"> <span class="icon-link" aria-hidden="true"></span> <span class="sr-only">Link to this function</span> </a> <span class="signature">zip(enumerables)</span> <a href="https://github.com/elixir-lang/elixir/blob/v1.7.2/lib/elixir/lib/stream.ex#L1118" class="view-source" rel="help" title="View Source"> <span class="icon-code" aria-hidden="true"></span> <span class="sr-only">View Source</span> </a> <span class="note">(since 1.4.0)</span> <div class="specs"> <pre>zip([<a href="Enumerable.html#t:t/0">Enumerable.t</a>()]) :: <a href="Enumerable.html#t:t/0">Enumerable.t</a>()</pre> <pre>zip(<a href="Enumerable.html#t:t/0">Enumerable.t</a>()) :: <a href="Enumerable.html#t:t/0">Enumerable.t</a>()</pre> </div> </div> <section class="docstring"> <p>Zips corresponding elements from a finite collection of enumerables into one stream of tuples.</p> <p>The zipping finishes as soon as any enumerable in the given collection completes.</p> <h2 id="zip/1-examples" class="section-heading"> <a href="#zip/1-examples" class="hover-link"><span class="icon-link" aria-hidden="true"></span></a> Examples </h2> <pre><code class="nohighlight makeup elixir"><span class="gp unselectable">iex> </span><span class="n">concat</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nc">Stream</span><span class="o">.</span><span class="n">concat</span><span class="p" data-group-id="4109943109-1">(</span><span class="mi">1</span><span class="o">.</span><span class="o">.</span><span class="mi">3</span><span class="p">,</span><span class="w"> </span><span class="mi">4</span><span class="o">.</span><span class="o">.</span><span class="mi">6</span><span class="p" data-group-id="4109943109-1">)</span><span class="w"> </span><span class="gp unselectable">iex> </span><span class="n">cycle</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nc">Stream</span><span class="o">.</span><span class="n">cycle</span><span class="p" data-group-id="4109943109-2">(</span><span class="p" data-group-id="4109943109-3">[</span><span class="s">"foo"</span><span class="p">,</span><span class="w"> </span><span class="s">"bar"</span><span class="p">,</span><span class="w"> </span><span class="s">"baz"</span><span class="p" data-group-id="4109943109-3">]</span><span class="p" data-group-id="4109943109-2">)</span><span class="w"> </span><span class="gp unselectable">iex> </span><span class="nc">Stream</span><span class="o">.</span><span class="n">zip</span><span class="p" data-group-id="4109943109-4">(</span><span class="p" data-group-id="4109943109-5">[</span><span class="n">concat</span><span class="p">,</span><span class="w"> </span><span class="p" data-group-id="4109943109-6">[</span><span class="ss">:a</span><span class="p">,</span><span class="w"> </span><span class="ss">:b</span><span class="p">,</span><span class="w"> </span><span class="ss">:c</span><span class="p" data-group-id="4109943109-6">]</span><span class="p">,</span><span class="w"> </span><span class="n">cycle</span><span class="p" data-group-id="4109943109-5">]</span><span class="p" data-group-id="4109943109-4">)</span><span class="w"> </span><span class="o">|></span><span class="w"> </span><span class="nc">Enum</span><span class="o">.</span><span class="n">to_list</span><span class="p" data-group-id="4109943109-7">(</span><span class="p" data-group-id="4109943109-7">)</span><span class="w"> </span><span class="p" data-group-id="4109943109-8">[</span><span class="p" data-group-id="4109943109-9">{</span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="ss">:a</span><span class="p">,</span><span class="w"> </span><span class="s">"foo"</span><span class="p" data-group-id="4109943109-9">}</span><span class="p">,</span><span class="w"> </span><span class="p" data-group-id="4109943109-10">{</span><span class="mi">2</span><span class="p">,</span><span class="w"> </span><span class="ss">:b</span><span class="p">,</span><span class="w"> </span><span class="s">"bar"</span><span class="p" data-group-id="4109943109-10">}</span><span class="p">,</span><span class="w"> </span><span class="p" data-group-id="4109943109-11">{</span><span class="mi">3</span><span class="p">,</span><span class="w"> </span><span class="ss">:c</span><span class="p">,</span><span class="w"> </span><span class="s">"baz"</span><span class="p" data-group-id="4109943109-11">}</span><span class="p" data-group-id="4109943109-8">]</span></code></pre> </section> </div> <div class="detail" id="zip/2"> <div class="detail-header"> <a href="#zip/2" class="detail-link" title="Link to this function"> <span class="icon-link" aria-hidden="true"></span> <span class="sr-only">Link to this function</span> </a> <span class="signature">zip(left, right)</span> <a href="https://github.com/elixir-lang/elixir/blob/v1.7.2/lib/elixir/lib/stream.ex#L1099" class="view-source" rel="help" title="View Source"> <span class="icon-code" aria-hidden="true"></span> <span class="sr-only">View Source</span> </a> <div class="specs"> <pre>zip(<a href="Enumerable.html#t:t/0">Enumerable.t</a>(), <a href="Enumerable.html#t:t/0">Enumerable.t</a>()) :: <a href="Enumerable.html#t:t/0">Enumerable.t</a>()</pre> </div> </div> <section class="docstring"> <p>Zips two collections together, lazily.</p> <p>The zipping finishes as soon as any enumerable completes.</p> <h2 id="zip/2-examples" class="section-heading"> <a href="#zip/2-examples" class="hover-link"><span class="icon-link" aria-hidden="true"></span></a> Examples </h2> <pre><code class="nohighlight makeup elixir"><span class="gp unselectable">iex> </span><span class="n">concat</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nc">Stream</span><span class="o">.</span><span class="n">concat</span><span class="p" data-group-id="0798597709-1">(</span><span class="mi">1</span><span class="o">.</span><span class="o">.</span><span class="mi">3</span><span class="p">,</span><span class="w"> </span><span class="mi">4</span><span class="o">.</span><span class="o">.</span><span class="mi">6</span><span class="p" data-group-id="0798597709-1">)</span><span class="w"> </span><span class="gp unselectable">iex> </span><span class="n">cycle</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nc">Stream</span><span class="o">.</span><span class="n">cycle</span><span class="p" data-group-id="0798597709-2">(</span><span class="p" data-group-id="0798597709-3">[</span><span class="ss">:a</span><span class="p">,</span><span class="w"> </span><span class="ss">:b</span><span class="p">,</span><span class="w"> </span><span class="ss">:c</span><span class="p" data-group-id="0798597709-3">]</span><span class="p" data-group-id="0798597709-2">)</span><span class="w"> </span><span class="gp unselectable">iex> </span><span class="nc">Stream</span><span class="o">.</span><span class="n">zip</span><span class="p" data-group-id="0798597709-4">(</span><span class="n">concat</span><span class="p">,</span><span class="w"> </span><span class="n">cycle</span><span class="p" data-group-id="0798597709-4">)</span><span class="w"> </span><span class="o">|></span><span class="w"> </span><span class="nc">Enum</span><span class="o">.</span><span class="n">to_list</span><span class="p" data-group-id="0798597709-5">(</span><span class="p" data-group-id="0798597709-5">)</span><span class="w"> </span><span class="p" data-group-id="0798597709-6">[</span><span class="p" data-group-id="0798597709-7">{</span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="ss">:a</span><span class="p" data-group-id="0798597709-7">}</span><span class="p">,</span><span class="w"> </span><span class="p" data-group-id="0798597709-8">{</span><span class="mi">2</span><span class="p">,</span><span class="w"> </span><span class="ss">:b</span><span class="p" data-group-id="0798597709-8">}</span><span class="p">,</span><span class="w"> </span><span class="p" data-group-id="0798597709-9">{</span><span class="mi">3</span><span class="p">,</span><span class="w"> </span><span class="ss">:c</span><span class="p" data-group-id="0798597709-9">}</span><span class="p">,</span><span class="w"> </span><span class="p" data-group-id="0798597709-10">{</span><span class="mi">4</span><span class="p">,</span><span class="w"> </span><span class="ss">:a</span><span class="p" data-group-id="0798597709-10">}</span><span class="p">,</span><span class="w"> </span><span class="p" data-group-id="0798597709-11">{</span><span class="mi">5</span><span class="p">,</span><span class="w"> </span><span class="ss">:b</span><span class="p" data-group-id="0798597709-11">}</span><span class="p">,</span><span class="w"> </span><span class="p" data-group-id="0798597709-12">{</span><span class="mi">6</span><span class="p">,</span><span class="w"> </span><span class="ss">:c</span><span class="p" data-group-id="0798597709-12">}</span><span class="p" data-group-id="0798597709-6">]</span></code></pre> </section> </div> </section> <footer class="footer"> <p> <span class="line"> Built using <a href="https://github.com/elixir-lang/ex_doc" title="ExDoc" target="_blank" rel="help noopener">ExDoc</a> (v0.19.1), </span> <span class="line"> designed by <a href="https://twitter.com/dignifiedquire" target="_blank" rel="noopener" title="@dignifiedquire">Friedel Ziegelmayer</a>. </span> </p> </footer> </div> </div> </section> </div> <script src="dist/app-a0c90688fa.js"></script> </body> </html>