pub fn merge_slice_produce<'a, 'b, P, T, U, F>(
    producer: Option<P>,
    slice: &'b [U],
    action: F
) -> Option<&'a [T]>where
    U: ArenaAllocatable<'b> + 'b,
    T: ArenaAllocatable<'a> + Produce<'a, 'b, P, U>,
    P: ExprProducer<'a, 'b>,
    F: FnMut(&'b U) -> Option<T>,