pub fn apply<F: Fn(X) -> Y, X, Y>(f: F) -> Apply<F, X, Y>
creates an operation that applies the closure