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>,