src/direct_product.rs

branch
dev
changeset 136
22fd33834ab7
parent 133
2b13f8a0c8ba
child 137
d5dfcb6abcf5
equal deleted inserted replaced
133:2b13f8a0c8ba 136:22fd33834ab7
363 { 363 {
364 type Decomposition<'b> 364 type Decomposition<'b>
365 = Pair<D::Decomposition<'b>, Q::Decomposition<'b>> 365 = Pair<D::Decomposition<'b>, Q::Decomposition<'b>>
366 where 366 where
367 Pair<A, B>: 'b; 367 Pair<A, B>: 'b;
368 type Reference<'b>
369 = Pair<D::Reference<'b>, Q::Reference<'b>>
370 where
371 Pair<A, B>: 'b;
372
373 #[inline]
374 fn lift<'b>(Pair(u, v): Self::Reference<'b>) -> Self::Decomposition<'b> {
375 Pair(D::lift(u), Q::lift(v))
376 }
377 } 368 }
378 369
379 impl<A, B, U, V, D, Q> Instance<Pair<A, B>, PairDecomposition<D, Q>> for Pair<U, V> 370 impl<A, B, U, V, D, Q> Instance<Pair<A, B>, PairDecomposition<D, Q>> for Pair<U, V>
380 where 371 where
381 A: Space, 372 A: Space,
397 .eval_decompose(|a| self.1.eval_decompose(|b| f(Pair(a, b)))) 388 .eval_decompose(|a| self.1.eval_decompose(|b| f(Pair(a, b))))
398 } 389 }
399 390
400 fn eval_ref_decompose<'b, R>( 391 fn eval_ref_decompose<'b, R>(
401 &'b self, 392 &'b self,
402 f: impl FnOnce(Pair<D::Reference<'b>, Q::Reference<'b>>) -> R, 393 f: impl FnOnce(Pair<D::Decomposition<'b>, Q::Decomposition<'b>>) -> R,
403 ) -> R 394 ) -> R
404 where 395 where
405 Pair<A, B>: 'b, 396 Pair<A, B>: 'b,
406 Self: 'b, 397 Self: 'b,
407 { 398 {
440 ) -> R 431 ) -> R
441 where 432 where
442 Pair<A, B>: 'b, 433 Pair<A, B>: 'b,
443 Self: 'b, 434 Self: 'b,
444 { 435 {
445 self.0.eval_ref_decompose(|a| { 436 self.0
446 self.1 437 .eval_ref_decompose(|a| self.1.eval_ref_decompose(|b| f(Pair(a, b))))
447 .eval_ref_decompose(|b| f(Pair(D::lift(a), Q::lift(b))))
448 })
449 } 438 }
450 439
451 fn eval_ref_decompose<'b, R>( 440 fn eval_ref_decompose<'b, R>(
452 &'b self, 441 &'b self,
453 f: impl FnOnce(Pair<D::Reference<'b>, Q::Reference<'b>>) -> R, 442 f: impl FnOnce(Pair<D::Decomposition<'b>, Q::Decomposition<'b>>) -> R,
454 ) -> R 443 ) -> R
455 where 444 where
456 Pair<A, B>: 'b, 445 Pair<A, B>: 'b,
457 Self: 'b, 446 Self: 'b,
458 { 447 {

mercurial