Streams—Lazy Enumerables

In Elixir, the Enum module is greedy. This means that when you pass it a collection, it potentially consumes all the contents of that collection. It also means the result will typically be another collection. Look at the following pipeline:

 [ 1, 2, 3, 4, 5 ]
 #=> [ 1, 2, 3, 4, 5 ]
 |> Enum.map(&(&1*&1))
 #=> [ 1, 4, 9, 16, 25 ]
 |> Enum.with_index
 #=> [ {1, 0}, {4, 1}, {9, 2}, {16, 3}, {25, 4} ]
 |> Enum.map(​fn​ {value, index} -> value - index ​end​)
 #=> [1, 3, 7, 13, 21]
 |> IO.inspect ​#=> [1, 3, 7, 13, 21]

The first map function takes the original list and creates a new list of its squares. with_index takes this list and returns a list of tuples. The next map then subtracts the index ...

Get Programming Elixir ≥ 1.6 now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.