src/direct_product.rs

branch
dev
changeset 134
d65377920b00
parent 133
2b13f8a0c8ba
child 135
087c60877100
equal deleted inserted replaced
133:2b13f8a0c8ba 134:d65377920b00
395 { 395 {
396 self.0 396 self.0
397 .eval_decompose(|a| self.1.eval_decompose(|b| f(Pair(a, b)))) 397 .eval_decompose(|a| self.1.eval_decompose(|b| f(Pair(a, b))))
398 } 398 }
399 399
400 fn eval_ref_decompose<'b, R>( 400 fn eval_ref_decompose<R, F>(&self, f: F) -> R
401 &'b self, 401 where
402 f: impl FnOnce(Pair<D::Reference<'b>, Q::Reference<'b>>) -> R, 402 F: for<'c> FnOnce(Pair<D::Reference<'c>, Q::Reference<'c>>) -> R,
403 ) -> R
404 where
405 Pair<A, B>: 'b,
406 Self: 'b,
407 { 403 {
408 self.0 404 self.0
409 .eval_ref_decompose(|a| self.1.eval_ref_decompose(|b| f(Pair(a, b)))) 405 .eval_ref_decompose(|a| self.1.eval_ref_decompose(|b| f(Pair(a, b))))
410 } 406 }
411 407
437 fn eval_decompose<'b, R>( 433 fn eval_decompose<'b, R>(
438 self, 434 self,
439 f: impl FnOnce(Pair<D::Decomposition<'b>, Q::Decomposition<'b>>) -> R, 435 f: impl FnOnce(Pair<D::Decomposition<'b>, Q::Decomposition<'b>>) -> R,
440 ) -> R 436 ) -> R
441 where 437 where
438 R: 'b,
442 Pair<A, B>: 'b, 439 Pair<A, B>: 'b,
443 Self: 'b, 440 Self: 'b,
444 { 441 {
445 self.0.eval_ref_decompose(|a| { 442 self.0.eval_ref_decompose(|a| {
446 self.1 443 self.1
447 .eval_ref_decompose(|b| f(Pair(D::lift(a), Q::lift(b)))) 444 .eval_ref_decompose(|b| f(Pair(D::lift(a), Q::lift(b))))
448 }) 445 })
449 } 446 }
450 447
451 fn eval_ref_decompose<'b, R>( 448 fn eval_ref_decompose<'b, 'c, R, F>(&'b self, f: F) -> R
452 &'b self, 449 where
453 f: impl FnOnce(Pair<D::Reference<'b>, Q::Reference<'b>>) -> R, 450 Pair<A, B>: 'c,
454 ) -> R
455 where
456 Pair<A, B>: 'b,
457 Self: 'b, 451 Self: 'b,
452 F: FnOnce(Pair<D::Reference<'c>, Q::Reference<'c>>) -> R,
458 { 453 {
459 self.0 454 self.0
460 .eval_ref_decompose(|a| self.1.eval_ref_decompose(|b| f(Pair(a, b)))) 455 .eval_ref_decompose(|a| self.1.eval_ref_decompose(|b| f(Pair(a, b))))
461 } 456 }
462 457

mercurial