pub struct Reverse<'a, InnerP: Profunctor, PointerBrand: ToDynCloneFn, S: 'a, T: 'a, A: 'a, B: 'a> {
pub run: <FnBrand<PointerBrand> as CloneFn>::Of<'a, <InnerP as Kind_266801a817966495>::Of<'a, B, A>, <InnerP as Kind_266801a817966495>::Of<'a, T, S>>,
}Expand description
The Reverse profunctor.
Wraps a function InnerP::Of<'a, B, A> -> InnerP::Of<'a, T, S>, reversing
the role of the inner profunctor’s type arguments.
Corresponds to PureScript’s newtype Re p s t a b = Re (p b a -> p t s).
§Type Parameters
'a: The lifetime of the functions.InnerP: The inner profunctor brand whose instances are reversed.PointerBrand: The outer cloneable function pointer brand for wrapping therunfunction.S: The fixed source type (outer structure, contravariant).T: The fixed target type (outer structure, covariant).A: The varying input type (contravariant position).B: The varying output type (covariant position).
Fields§
§run: <FnBrand<PointerBrand> as CloneFn>::Of<'a, <InnerP as Kind_266801a817966495>::Of<'a, B, A>, <InnerP as Kind_266801a817966495>::Of<'a, T, S>>The wrapped function InnerP::Of<B, A> -> InnerP::Of<T, S>.
Implementations§
Source§impl<'a, InnerP: Profunctor, PointerBrand: ToDynCloneFn, S: 'a, T: 'a, A: 'a, B: 'a> Reverse<'a, InnerP, PointerBrand, S, T, A, B>
§Type Parameters
'a: The lifetime of the functions.
InnerP: The inner profunctor brand.
PointerBrand: The outer cloneable function pointer brand.
S: The fixed source type.
T: The fixed target type.
A: The varying input type.
B: The varying output type.
impl<'a, InnerP: Profunctor, PointerBrand: ToDynCloneFn, S: 'a, T: 'a, A: 'a, B: 'a> Reverse<'a, InnerP, PointerBrand, S, T, A, B>
§Type Parameters
'a: The lifetime of the functions.InnerP: The inner profunctor brand.PointerBrand: The outer cloneable function pointer brand.S: The fixed source type.T: The fixed target type.A: The varying input type.B: The varying output type.
Sourcepub fn new(
f: impl 'a + Fn(<InnerP as Kind_266801a817966495>::Of<'a, B, A>) -> <InnerP as Kind_266801a817966495>::Of<'a, T, S>,
) -> Self
pub fn new( f: impl 'a + Fn(<InnerP as Kind_266801a817966495>::Of<'a, B, A>) -> <InnerP as Kind_266801a817966495>::Of<'a, T, S>, ) -> Self
Creates a new Reverse instance by wrapping a function.
§Type Signature
forall InnerP PointerBrand S T A B. (Profunctor InnerP, ToDynCloneFn PointerBrand) => (InnerP B A -> InnerP T S) -> Reverse InnerP PointerBrand S T A B
§Parameters
f: The functionInnerP::Of<B, A> -> InnerP::Of<T, S>to wrap.
§Returns
A new instance of the type.
§Examples
use fp_library::{
brands::{
RcBrand,
RcFnBrand,
optics::*,
},
types::optics::{
Reverse,
Tagged,
},
};
// Reverse wraps a function from `Tagged<B, A>` to `Tagged<T, S>`.
let rev =
Reverse::<TaggedBrand, RcBrand, i32, i32, i32, i32>::new(|tagged: Tagged<i32, i32>| {
Tagged::new(tagged.0 + 1)
});
assert_eq!((rev.run)(Tagged::new(41)).0, 42);Trait Implementations§
Source§impl<'a, InnerP: Profunctor, PointerBrand: ToDynCloneFn, S: 'a, T: 'a, A: 'a, B: 'a> Clone for Reverse<'a, InnerP, PointerBrand, S, T, A, B>
§Type Parameters
'a: The lifetime of the functions.
InnerP: The inner profunctor brand.
PointerBrand: The outer cloneable function pointer brand.
S: The fixed source type.
T: The fixed target type.
A: The varying input type.
B: The varying output type.
impl<'a, InnerP: Profunctor, PointerBrand: ToDynCloneFn, S: 'a, T: 'a, A: 'a, B: 'a> Clone for Reverse<'a, InnerP, PointerBrand, S, T, A, B>
§Type Parameters
'a: The lifetime of the functions.InnerP: The inner profunctor brand.PointerBrand: The outer cloneable function pointer brand.S: The fixed source type.T: The fixed target type.A: The varying input type.B: The varying output type.
Source§fn clone(&self) -> Self
fn clone(&self) -> Self
§Type Signature
forall InnerP PointerBrand S T A B. (Profunctor InnerP, ToDynCloneFn PointerBrand) => &Reverse InnerP PointerBrand S T A B -> Reverse InnerP PointerBrand S T A B
§Returns
A new Reverse instance that is a copy of the original.
§Examples
use fp_library::{
brands::{
RcBrand,
RcFnBrand,
optics::*,
},
types::optics::{
Reverse,
Tagged,
},
};
let rev = Reverse::<TaggedBrand, RcBrand, i32, i32, i32, i32>::new(|t: Tagged<i32, i32>| {
Tagged::new(t.0)
});
let cloned = rev.clone();
assert_eq!((cloned.run)(Tagged::new(42)).0, 42);1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl<'a, A: 'a, B: 'a, InnerP: Profunctor + 'static, PointerBrand: ToDynCloneFn + 'static, S: 'static, T: 'static> InferableBrand_266801a817966495<'a, ReverseBrand<InnerP, PointerBrand, S, T>, A, B> for Reverse<'a, InnerP, PointerBrand, S, T, A, B>
Generated InferableBrand_266801a817966495 implementation for Reverse < 'a, InnerP, PointerBrand, S, T, A, B > with brand ReverseBrand < InnerP, PointerBrand, S, T >.
impl<'a, A: 'a, B: 'a, InnerP: Profunctor + 'static, PointerBrand: ToDynCloneFn + 'static, S: 'static, T: 'static> InferableBrand_266801a817966495<'a, ReverseBrand<InnerP, PointerBrand, S, T>, A, B> for Reverse<'a, InnerP, PointerBrand, S, T, A, B>
Generated InferableBrand_266801a817966495 implementation for Reverse < 'a, InnerP, PointerBrand, S, T, A, B > with brand ReverseBrand < InnerP, PointerBrand, S, T >.
Auto Trait Implementations§
impl<'a, InnerP, PointerBrand, S, T, A, B> Freeze for Reverse<'a, InnerP, PointerBrand, S, T, A, B>where
<PointerBrand as RefCountedPointer>::Of<'a, dyn Fn(<InnerP as Kind_266801a817966495>::Of<'a, B, A>) -> <InnerP as Kind_266801a817966495>::Of<'a, T, S> + 'a>: Freeze,
impl<'a, InnerP, PointerBrand, S, T, A, B> RefUnwindSafe for Reverse<'a, InnerP, PointerBrand, S, T, A, B>where
<PointerBrand as RefCountedPointer>::Of<'a, dyn Fn(<InnerP as Kind_266801a817966495>::Of<'a, B, A>) -> <InnerP as Kind_266801a817966495>::Of<'a, T, S> + 'a>: RefUnwindSafe,
impl<'a, InnerP, PointerBrand, S, T, A, B> Send for Reverse<'a, InnerP, PointerBrand, S, T, A, B>where
<PointerBrand as RefCountedPointer>::Of<'a, dyn Fn(<InnerP as Kind_266801a817966495>::Of<'a, B, A>) -> <InnerP as Kind_266801a817966495>::Of<'a, T, S> + 'a>: Send,
impl<'a, InnerP, PointerBrand, S, T, A, B> Sync for Reverse<'a, InnerP, PointerBrand, S, T, A, B>where
<PointerBrand as RefCountedPointer>::Of<'a, dyn Fn(<InnerP as Kind_266801a817966495>::Of<'a, B, A>) -> <InnerP as Kind_266801a817966495>::Of<'a, T, S> + 'a>: Sync,
impl<'a, InnerP, PointerBrand, S, T, A, B> Unpin for Reverse<'a, InnerP, PointerBrand, S, T, A, B>where
<PointerBrand as RefCountedPointer>::Of<'a, dyn Fn(<InnerP as Kind_266801a817966495>::Of<'a, B, A>) -> <InnerP as Kind_266801a817966495>::Of<'a, T, S> + 'a>: Unpin,
impl<'a, InnerP, PointerBrand, S, T, A, B> UnsafeUnpin for Reverse<'a, InnerP, PointerBrand, S, T, A, B>where
<PointerBrand as RefCountedPointer>::Of<'a, dyn Fn(<InnerP as Kind_266801a817966495>::Of<'a, B, A>) -> <InnerP as Kind_266801a817966495>::Of<'a, T, S> + 'a>: UnsafeUnpin,
impl<'a, InnerP, PointerBrand, S, T, A, B> UnwindSafe for Reverse<'a, InnerP, PointerBrand, S, T, A, B>where
<PointerBrand as RefCountedPointer>::Of<'a, dyn Fn(<InnerP as Kind_266801a817966495>::Of<'a, B, A>) -> <InnerP as Kind_266801a817966495>::Of<'a, T, S> + 'a>: UnwindSafe,
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more