```rust
fn fold_op<F: Fn(f64, f64)>(input: &[u8], init: f64, f: F) -> IResult<&[u8], f64> {
fold_many0!(ws!(alt!(apply!(list) | apply!(f64::from_str))), init, f)
}
named!(list<f64>, delimited!(tag!("("), ws!(alt!(
proceed!(tag!("+"), apply!(fop, 0.0, |acc, item| acc + item))
)), tag!(")")));
```