--- a/src/direct_product.rs Mon May 12 21:26:04 2025 -0500 +++ b/src/direct_product.rs Mon May 12 21:36:41 2025 -0500 @@ -385,21 +385,23 @@ U: Instance<A, D>, V: Instance<B, Q>, { - fn eval_decompose<'b, R>( + fn eval_decompose<'c, R>( self, - f: impl FnOnce(Pair<D::Decomposition<'b>, Q::Decomposition<'b>>) -> R, + f: impl FnOnce(Pair<D::Decomposition<'c>, Q::Decomposition<'c>>) -> R, ) -> R where - Pair<A, B>: 'b, - Self: 'b, + Pair<A, B>: 'c, { self.0 .eval_decompose(|a| self.1.eval_decompose(|b| f(Pair(a, b)))) } - fn eval_ref_decompose<R, F>(&self, f: F) -> R + fn eval_ref_decompose<'c, R>( + &self, + f: impl FnOnce(Pair<D::Reference<'c>, Q::Reference<'c>>) -> R, + ) -> R where - F: for<'c> FnOnce(Pair<D::Reference<'c>, Q::Reference<'c>>) -> R, + Pair<A, B>: 'c, { self.0 .eval_ref_decompose(|a| self.1.eval_ref_decompose(|b| f(Pair(a, b)))) @@ -430,14 +432,12 @@ &'a U: Instance<A, D>, &'a V: Instance<B, Q>, { - fn eval_decompose<'b, R>( + fn eval_decompose<'c, R>( self, - f: impl FnOnce(Pair<D::Decomposition<'b>, Q::Decomposition<'b>>) -> R, + f: impl FnOnce(Pair<D::Decomposition<'c>, Q::Decomposition<'c>>) -> R, ) -> R where - R: 'b, - Pair<A, B>: 'b, - Self: 'b, + Pair<A, B>: 'c, { self.0.eval_ref_decompose(|a| { self.1 @@ -445,11 +445,12 @@ }) } - fn eval_ref_decompose<'b, 'c, R, F>(&'b self, f: F) -> R + fn eval_ref_decompose<'c, R>( + &self, + f: impl FnOnce(Pair<D::Reference<'c>, Q::Reference<'c>>) -> R, + ) -> R where Pair<A, B>: 'c, - Self: 'b, - F: FnOnce(Pair<D::Reference<'c>, Q::Reference<'c>>) -> R, { self.0 .eval_ref_decompose(|a| self.1.eval_ref_decompose(|b| f(Pair(a, b))))