Module carboxyl::lift [] [src]

Lifting of n-ary functions.

A lift maps a function on values to a function on signals. Given a function of type F: Fn(A, B, …) -> R and signals of types Signal<A>, Signal<B>, … the lift! macro creates a Signal<R>, whose content is computed using the function.

Currently lift is only implemented for functions with up to four arguments. This limitation is due to the current implementation strategy (and maybe limitations of Rust's type system), but it can be increased to arbitrary but finite arity if required.

Example

let sink_a = Sink::new();
let sink_b = Sink::new();
let product = lift!(
    |a, b| a * b,
    &sink_a.stream().hold(0),
    &sink_b.stream().hold(0)
);
assert_eq!(product.sample(), 0);
sink_a.send(3);
sink_b.send(5);
assert_eq!(product.sample(), 15);

Functions

lift0

Lift a 0-ary function.

lift1

Lift a unary function.

lift2

Lift a binary function.

lift3

Lift a ternary function.

lift4

Lift a quarternary function.