ESC
Type to search...
S
Soli Docs

Pipeline Operator

Chain function calls in a readable, left-to-right manner with the pipeline operator.

Basic Usage

|> Pipeline Operator

Passes the left-hand value as the first argument to the right-hand function.

With Multiple Arguments

def add(a: Int, b: Int) -> Int a + b end
def multiply(a: Int, b: Int) -> Int a * b end

# 5 |> add(3) means add(5, 3)
let result = 5 |> add(3) |> multiply(2);  # (5 + 3) * 2 = 16

# More complex chaining
let calc = 100
    |> def(x) x - 10 end()
    |> def(x) int(x / 3) end()
    |> def(x) x * 4 end();
print(calc);  # ((100 - 10) / 3) * 4 = 120

With Collection Methods

let numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];

# Method chaining with pipeline
let result = numbers
    .filter(def(x) x % 2 == 0)
    .map(def(x) x * x)
    .each(def(x) print(x));

# Pipeline style
let processed = numbers
    |> filter(def(x) x > 5)
    |> map(def(x) x * 2)
    |> reduce(def(acc, x) acc + x, 0);
print(processed);  # (6+7+8+9+10) * 2 = 80

Real-World Examples

# Data processing pipeline
def process_user_data(raw_data: Hash) -> Hash
    raw_data
        |> def(d) d["sanitized_email"] = d["email"].lower().trim(); d end()
        |> validate_user()
        |> enrich_profile()
        |> calculate_metrics()
end

# HTTP request pipeline
def fetch_and_process -> Hash
    url
        |>(url: String) http_get_json()
        |> transform_response()
        |> validate_data()
        |> format_output()
end
# Complex data pipeline let sales_data = [ {"product": "A", "quantity": 10, "price": 100}, {"product": "B", "quantity": 5, "price": 200}, {"product": "C", "quantity": 15, "price": 50}, ]; let total_revenue = sales_data |> map(def(sale) sale["quantity"] * sale["price"]) |> reduce(def(acc, rev) acc + rev, 0); print("Total Revenue: $" + str(total_revenue)); # $2750

Benefits of Pipeline

Readability

Data flows left-to-right, matching natural reading order.

Debugging

Easy to add intermediate steps or breakpoints.

Composability

Build complex transformations from simple functions.

No Nesting

Avoid deeply nested function calls.