Functional Data Pipelines

Iterator auto-conversion makes list, string, and range pipelines concise.

let result =
    [1, 2, 3, 4, 5]
        .filter(|x| x % 2 == 1)
        .map(|x| x * x)
        .collect()

Zip multiple datasets

let pairs =
    zip(
        ["Alice", "Bob"],
        [10, 20]
    )
    .collect()

Enumerate text

let chars =
    "Novum"
        .enumerate()
        .collect()

Bounded range processing

let first_ten =
    (1..=100)
        .filter(|x| x % 2 == 0)
        .take(10)
        .collect()

Materialize only at the boundary

Iterator adaptors are lazy, so a good pipeline keeps the value as an iterator until a concrete list is required:

let pipeline =
    input
        .filter(predicate)
        .map(transform)
        .take(100)

let values = pipeline.collect()