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