Skip to content
Lesson 9 of 15

Step 1 of 5 · Reading · ~1 min

Learn

Functions and Modules

The pipe operator |> passes the result of the left expression as the FIRST argument of the right. It turns nested calls inside out:

# Without pipes — read inside out:
result = String.upcase(String.trim(input))

# With pipes — read top to bottom:
result =
    input
    |> String.trim()
    |> String.upcase()

This is one of Elixir's signature features. Pipelines compose data transformations with the same readability as a Unix shell pipeline.

[1, 2, 3, 4, 5]
|> Enum.map(&(&1 * &1))    # [1, 4, 9, 16, 25]
|> Enum.filter(&(&1 > 4))   # [9, 16, 25]
|> Enum.sum()               # 50
|> IO.puts()                 # prints 50

Elixir's standard library is designed around the convention that the "main" argument comes first, so piping is natural.

Up nextLists and TuplesCollections

Discussion

Ask a question, share an insight, or help someone who’s stuck.

Sign in to post a comment or reply.

Loading…