src/direct_product.rs

branch
dev
changeset 135
087c60877100
parent 134
d65377920b00
equal deleted inserted replaced
134:d65377920b00 135:087c60877100
383 D: Decomposition<A>, 383 D: Decomposition<A>,
384 Q: Decomposition<B>, 384 Q: Decomposition<B>,
385 U: Instance<A, D>, 385 U: Instance<A, D>,
386 V: Instance<B, Q>, 386 V: Instance<B, Q>,
387 { 387 {
388 fn eval_decompose<'b, R>( 388 fn eval_decompose<'c, R>(
389 self, 389 self,
390 f: impl FnOnce(Pair<D::Decomposition<'b>, Q::Decomposition<'b>>) -> R, 390 f: impl FnOnce(Pair<D::Decomposition<'c>, Q::Decomposition<'c>>) -> R,
391 ) -> R 391 ) -> R
392 where 392 where
393 Pair<A, B>: 'b, 393 Pair<A, B>: 'c,
394 Self: 'b,
395 { 394 {
396 self.0 395 self.0
397 .eval_decompose(|a| self.1.eval_decompose(|b| f(Pair(a, b)))) 396 .eval_decompose(|a| self.1.eval_decompose(|b| f(Pair(a, b))))
398 } 397 }
399 398
400 fn eval_ref_decompose<R, F>(&self, f: F) -> R 399 fn eval_ref_decompose<'c, R>(
401 where 400 &self,
402 F: for<'c> FnOnce(Pair<D::Reference<'c>, Q::Reference<'c>>) -> R, 401 f: impl FnOnce(Pair<D::Reference<'c>, Q::Reference<'c>>) -> R,
402 ) -> R
403 where
404 Pair<A, B>: 'c,
403 { 405 {
404 self.0 406 self.0
405 .eval_ref_decompose(|a| self.1.eval_ref_decompose(|b| f(Pair(a, b)))) 407 .eval_ref_decompose(|a| self.1.eval_ref_decompose(|b| f(Pair(a, b))))
406 } 408 }
407 409
428 U: Instance<A, D>, 430 U: Instance<A, D>,
429 V: Instance<B, Q>, 431 V: Instance<B, Q>,
430 &'a U: Instance<A, D>, 432 &'a U: Instance<A, D>,
431 &'a V: Instance<B, Q>, 433 &'a V: Instance<B, Q>,
432 { 434 {
433 fn eval_decompose<'b, R>( 435 fn eval_decompose<'c, R>(
434 self, 436 self,
435 f: impl FnOnce(Pair<D::Decomposition<'b>, Q::Decomposition<'b>>) -> R, 437 f: impl FnOnce(Pair<D::Decomposition<'c>, Q::Decomposition<'c>>) -> R,
436 ) -> R 438 ) -> R
437 where 439 where
438 R: 'b, 440 Pair<A, B>: 'c,
439 Pair<A, B>: 'b,
440 Self: 'b,
441 { 441 {
442 self.0.eval_ref_decompose(|a| { 442 self.0.eval_ref_decompose(|a| {
443 self.1 443 self.1
444 .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))))
445 }) 445 })
446 } 446 }
447 447
448 fn eval_ref_decompose<'b, 'c, R, F>(&'b self, f: F) -> R 448 fn eval_ref_decompose<'c, R>(
449 &self,
450 f: impl FnOnce(Pair<D::Reference<'c>, Q::Reference<'c>>) -> R,
451 ) -> R
449 where 452 where
450 Pair<A, B>: 'c, 453 Pair<A, B>: 'c,
451 Self: 'b,
452 F: FnOnce(Pair<D::Reference<'c>, Q::Reference<'c>>) -> R,
453 { 454 {
454 self.0 455 self.0
455 .eval_ref_decompose(|a| self.1.eval_ref_decompose(|b| f(Pair(a, b)))) 456 .eval_ref_decompose(|a| self.1.eval_ref_decompose(|b| f(Pair(a, b))))
456 } 457 }
457 458

mercurial