Skip to main content

Tuple2Brand

Struct Tuple2Brand 

Source
pub struct Tuple2Brand;
Expand description

Brand for (First, Second), with neither First nor Second applied.

Trait Implementations§

Source§

impl Bifoldable for Tuple2Brand

Source§

fn bi_fold_right<'a, FnBrand: CloneFn + 'a, A: 'a + Clone, B: 'a + Clone, C: 'a>( f: impl Fn(A, C) -> C + 'a, g: impl Fn(B, C) -> C + 'a, z: C, p: <Self as Kind_266801a817966495>::Of<'a, A, B>, ) -> C

Folds a tuple using two step functions, right-associatively.

Applies f to the first value and g to the second value, folding (a, b) as f(a, g(b, z)).

§Type Signature

forall A B C. CloneFn FnBrand => ((A, C) -> C, (B, C) -> C, C, Tuple2 A B) -> C

§Type Parameters
  • 'a: The lifetime of the values.
  • FnBrand: The brand of the cloneable function to use.
  • A: The type of the first element.
  • B: The type of the second element.
  • C: The accumulator type.
§Parameters
  • f: The step function applied to the first element.
  • g: The step function applied to the second element.
  • z: The initial accumulator.
  • p: The tuple to fold.
§Returns

f(a, g(b, z)).

§Examples
use fp_library::{
	brands::*,
	functions::*,
};

assert_eq!(
	explicit::bi_fold_right::<RcFnBrand, Tuple2Brand, _, _, _, _, _>(
		(|a: i32, acc| acc - a, |b: i32, acc| acc + b),
		0,
		(3, 5),
	),
	2
);
Source§

fn bi_fold_left<'a, FnBrand: CloneFn + 'a, A: 'a + Clone, B: 'a + Clone, C: 'a>( f: impl Fn(C, A) -> C + 'a, g: impl Fn(C, B) -> C + 'a, z: C, p: <Self as Kind_266801a817966495>::Of<'a, A, B>, ) -> C

Folds a tuple using two step functions, left-associatively.

Applies f to the first value and g to the second value, folding (a, b) as g(f(z, a), b).

§Type Signature

forall A B C. CloneFn FnBrand => ((C, A) -> C, (C, B) -> C, C, Tuple2 A B) -> C

§Type Parameters
  • 'a: The lifetime of the values.
  • FnBrand: The brand of the cloneable function to use.
  • A: The type of the first element.
  • B: The type of the second element.
  • C: The accumulator type.
§Parameters
  • f: The step function applied to the first element.
  • g: The step function applied to the second element.
  • z: The initial accumulator.
  • p: The tuple to fold.
§Returns

g(f(z, a), b).

§Examples
use fp_library::{
	brands::*,
	functions::*,
};

assert_eq!(
	explicit::bi_fold_left::<RcFnBrand, Tuple2Brand, _, _, _, _, _>(
		(|acc, a: i32| acc - a, |acc, b: i32| acc + b),
		0,
		(3, 5),
	),
	2
);
Source§

fn bi_fold_map<'a, FnBrand: CloneFn + 'a, A: 'a + Clone, B: 'a + Clone, M>( f: impl Fn(A) -> M + 'a, g: impl Fn(B) -> M + 'a, p: <Self as Kind_266801a817966495>::Of<'a, A, B>, ) -> M
where M: Monoid + 'a,

Maps both elements of a tuple to a monoid and combines the results.

Computes M::append(f(a), g(b)) for a tuple (a, b).

§Type Signature

forall A B M. (CloneFn FnBrand, Monoid M) => (A -> M, B -> M, Tuple2 A B) -> M

§Type Parameters
  • 'a: The lifetime of the values.
  • FnBrand: The brand of the cloneable function to use.
  • A: The type of the first element.
  • B: The type of the second element.
  • M: The monoid type.
§Parameters
  • f: The function mapping the first element to the monoid.
  • g: The function mapping the second element to the monoid.
  • p: The tuple to fold.
§Returns

M::append(f(a), g(b)).

§Examples
use fp_library::{
	brands::*,
	functions::*,
};

assert_eq!(
	explicit::bi_fold_map::<RcFnBrand, Tuple2Brand, _, _, _, _, _>(
		(|a: i32| a.to_string(), |b: i32| b.to_string()),
		(3, 5),
	),
	"35".to_string()
);
Source§

impl Bifunctor for Tuple2Brand

Source§

fn bimap<'a, A: 'a, B: 'a, C: 'a, D: 'a>( f: impl Fn(A) -> B + 'a, g: impl Fn(C) -> D + 'a, p: <Self as Kind_266801a817966495>::Of<'a, A, C>, ) -> <Self as Kind_266801a817966495>::Of<'a, B, D>

Maps functions over the values in the tuple.

This method applies one function to the first value and another to the second value.

§Type Signature

forall A B C D. (A -> B, C -> D, Tuple2 A C) -> Tuple2 B D

§Type Parameters
  • 'a: The lifetime of the values.
  • A: The type of the first value.
  • B: The type of the mapped first value.
  • C: The type of the second value.
  • D: The type of the mapped second value.
§Parameters
  • f: The function to apply to the first value.
  • g: The function to apply to the second value.
  • p: The tuple to map over.
§Returns

A new tuple containing the mapped values.

§Examples
use fp_library::{
	brands::*,
	functions::*,
};

let x = (1, 5);
assert_eq!(
	explicit::bimap::<Tuple2Brand, _, _, _, _, _, _>((|a| a + 1, |b| b * 2), x),
	(2, 10)
);
Source§

fn map_first<'a, A: 'a, B: 'a, C: 'a>( f: impl Fn(A) -> B + 'a, p: <Self as Kind_266801a817966495>::Of<'a, A, C>, ) -> <Self as Kind_266801a817966495>::Of<'a, B, C>

Maps a function over the first type argument of the bifunctor. Read more
Source§

fn map_second<'a, A: 'a, B: 'a, C: 'a>( g: impl Fn(B) -> C + 'a, p: <Self as Kind_266801a817966495>::Of<'a, A, B>, ) -> <Self as Kind_266801a817966495>::Of<'a, A, C>

Maps a function over the second type argument of the bifunctor. Read more
Source§

impl Bitraversable for Tuple2Brand

Source§

fn bi_traverse<'a, A: 'a + Clone, B: 'a + Clone, C: 'a + Clone, D: 'a + Clone, F: Applicative>( f: impl Fn(A) -> <F as Kind_cdc7cd43dac7585f>::Of<'a, C> + 'a, g: impl Fn(B) -> <F as Kind_cdc7cd43dac7585f>::Of<'a, D> + 'a, p: <Self as Kind_266801a817966495>::Of<'a, A, B>, ) -> <F as Kind_cdc7cd43dac7585f>::Of<'a, <Self as Kind_266801a817966495>::Of<'a, C, D>>

Traverses a tuple with two effectful functions.

Applies f to the first element and g to the second element, combining the effects via lift2.

§Type Signature

forall A B C D F. Applicative F => (A -> F C, B -> F D, Tuple2 A B) -> F (Tuple2 C D)

§Type Parameters
  • 'a: The lifetime of the values.
  • A: The type of the first element.
  • B: The type of the second element.
  • C: The output type for the first element.
  • D: The output type for the second element.
  • F: The applicative context.
§Parameters
  • f: The function applied to the first element.
  • g: The function applied to the second element.
  • p: The tuple to traverse.
§Returns

lift2(|c, d| (c, d), f(a), g(b)).

§Examples
use fp_library::{
	brands::*,
	functions::*,
};

assert_eq!(
	explicit::bi_traverse::<RcFnBrand, Tuple2Brand, _, _, _, _, OptionBrand, _, _>(
		(|a: i32| Some(a + 1), |b: i32| Some(b * 2)),
		(3, 5),
	),
	Some((4, 10))
);
Source§

fn bi_sequence<'a, A: 'a + Clone, B: 'a + Clone, F: Applicative>( ta: <Self as Kind_266801a817966495>::Of<'a, <F as Kind_cdc7cd43dac7585f>::Of<'a, A>, <F as Kind_cdc7cd43dac7585f>::Of<'a, B>>, ) -> <F as Kind_cdc7cd43dac7585f>::Of<'a, <Self as Kind_266801a817966495>::Of<'a, A, B>>
where <F as Kind_cdc7cd43dac7585f>::Of<'a, A>: Clone, <F as Kind_cdc7cd43dac7585f>::Of<'a, B>: Clone,

Sequences a bitraversable structure containing applicative values. Read more
Source§

impl Clone for Tuple2Brand

Source§

fn clone(&self) -> Tuple2Brand

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Tuple2Brand

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for Tuple2Brand

Source§

fn default() -> Tuple2Brand

Returns the “default value” for a type. Read more
Source§

impl Hash for Tuple2Brand

Source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · Source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
Source§

impl<'a, First: 'a, Second: 'a> InferableBrand_266801a817966495<'a, Tuple2Brand, First, Second> for (First, Second)

Generated InferableBrand_266801a817966495 implementation for (First, Second) with brand Tuple2Brand.

Source§

type Marker = Val

Dispatch marker: Val for owned types, Ref for references.
Source§

impl<First, Second> InferableBrand_5b1bcedfd80bdc16<Tuple2Brand, First, Second> for (First, Second)

Generated InferableBrand_5b1bcedfd80bdc16 implementation for (First, Second) with brand Tuple2Brand.

Source§

type Marker = Val

Dispatch marker: Val for owned types, Ref for references.
Source§

impl Kind_266801a817966495 for Tuple2Brand

Generated implementation of Kind_266801a817966495 for Tuple2Brand.

Source§

type Of<'a, First: 'a, Second: 'a> = (First, Second)

The applied type.
Source§

impl Kind_5b1bcedfd80bdc16 for Tuple2Brand

Generated implementation of Kind_5b1bcedfd80bdc16 for Tuple2Brand.

Source§

type Of<First, Second> = (First, Second)

The applied type.
Source§

impl Ord for Tuple2Brand

Source§

fn cmp(&self, other: &Tuple2Brand) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 · Source§

fn max(self, other: Self) -> Self
where Self: Sized,

Compares and returns the maximum of two values. Read more
1.21.0 · Source§

fn min(self, other: Self) -> Self
where Self: Sized,

Compares and returns the minimum of two values. Read more
1.50.0 · Source§

fn clamp(self, min: Self, max: Self) -> Self
where Self: Sized,

Restrict a value to a certain interval. Read more
Source§

impl PartialEq for Tuple2Brand

Source§

fn eq(&self, other: &Tuple2Brand) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl PartialOrd for Tuple2Brand

Source§

fn partial_cmp(&self, other: &Tuple2Brand) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 · Source§

fn lt(&self, other: &Rhs) -> bool

Tests less than (for self and other) and is used by the < operator. Read more
1.0.0 · Source§

fn le(&self, other: &Rhs) -> bool

Tests less than or equal to (for self and other) and is used by the <= operator. Read more
1.0.0 · Source§

fn gt(&self, other: &Rhs) -> bool

Tests greater than (for self and other) and is used by the > operator. Read more
1.0.0 · Source§

fn ge(&self, other: &Rhs) -> bool

Tests greater than or equal to (for self and other) and is used by the >= operator. Read more
Source§

impl RefBifoldable for Tuple2Brand

Source§

fn ref_bi_fold_right<'a, FnBrand: LiftFn + 'a, A: 'a + Clone, B: 'a + Clone, C: 'a>( f: impl Fn(&A, C) -> C + 'a, g: impl Fn(&B, C) -> C + 'a, z: C, p: &<Self as Kind_266801a817966495>::Of<'a, A, B>, ) -> C

Folds a tuple from right to left by reference using two step functions.

Applies f to a reference of the first value and g to a reference of the second value, folding (a, b) as f(&a, g(&b, z)).

§Type Signature

forall A B C. ((&A, C) -> C, (&B, C) -> C, C, &Tuple2 A B) -> C

§Type Parameters
  • 'a: The lifetime of the values.
  • FnBrand: The brand of the cloneable function to use.
  • A: The type of the first element.
  • B: The type of the second element.
  • C: The accumulator type.
§Parameters
  • f: The step function applied to a reference of the first element.
  • g: The step function applied to a reference of the second element.
  • z: The initial accumulator.
  • p: The tuple to fold by reference.
§Returns

f(&a, g(&b, z)).

§Examples
use fp_library::{
	brands::*,
	functions::*,
};

let x = (3, 5);
assert_eq!(
	explicit::bi_fold_right::<RcFnBrand, Tuple2Brand, _, _, _, _, _>(
		(|a: &i32, acc| acc - *a, |b: &i32, acc| acc + *b),
		0,
		&x,
	),
	2
);
Source§

fn ref_bi_fold_left<'a, FnBrand: LiftFn + 'a, A: 'a + Clone, B: 'a + Clone, C: 'a>( f: impl Fn(C, &A) -> C + 'a, g: impl Fn(C, &B) -> C + 'a, z: C, p: &<Self as Kind_266801a817966495>::Of<'a, A, B>, ) -> C

Folds the bifoldable structure from left to right by reference using two step functions. Read more
Source§

fn ref_bi_fold_map<'a, FnBrand: LiftFn + 'a, A: 'a + Clone, B: 'a + Clone, M>( f: impl Fn(&A) -> M + 'a, g: impl Fn(&B) -> M + 'a, p: &<Self as Kind_266801a817966495>::Of<'a, A, B>, ) -> M
where M: Monoid + 'a,

Maps elements of both types to a monoid by reference and combines the results. Read more
Source§

impl RefBifunctor for Tuple2Brand

Source§

fn ref_bimap<'a, A: 'a, B: 'a, C: 'a, D: 'a>( f: impl Fn(&A) -> B + 'a, g: impl Fn(&C) -> D + 'a, p: &<Self as Kind_266801a817966495>::Of<'a, A, C>, ) -> <Self as Kind_266801a817966495>::Of<'a, B, D>

Maps functions over references to the values in the tuple.

This method applies one function to a reference of the first value and another to a reference of the second value, producing a new tuple with mapped values. The original tuple is borrowed, not consumed.

§Type Signature

forall A B C D. (&A -> B, &C -> D, &Tuple2 A C) -> Tuple2 B D

§Type Parameters
  • 'a: The lifetime of the values.
  • A: The type of the first value.
  • B: The type of the mapped first value.
  • C: The type of the second value.
  • D: The type of the mapped second value.
§Parameters
  • f: The function to apply to a reference of the first value.
  • g: The function to apply to a reference of the second value.
  • p: The tuple to map over by reference.
§Returns

A new tuple containing the mapped values.

§Examples
use fp_library::{
	brands::*,
	classes::ref_bifunctor::*,
	functions::*,
};

let x = (1, 5);
assert_eq!(ref_bimap::<Tuple2Brand, _, _, _, _>(|a| *a + 1, |b| *b * 2, &x), (2, 10));
Source§

fn ref_map_first<'a, A: 'a, B: 'a, C: Clone + 'a>( f: impl Fn(&A) -> B + 'a, p: &<Self as Kind_266801a817966495>::Of<'a, A, C>, ) -> <Self as Kind_266801a817966495>::Of<'a, B, C>

Maps a function over the first type argument of the bifunctor by reference. Read more
Source§

fn ref_map_second<'a, A: Clone + 'a, B: 'a, C: 'a>( g: impl Fn(&B) -> C + 'a, p: &<Self as Kind_266801a817966495>::Of<'a, A, B>, ) -> <Self as Kind_266801a817966495>::Of<'a, A, C>

Maps a function over the second type argument of the bifunctor by reference. Read more
Source§

impl RefBitraversable for Tuple2Brand

Source§

fn ref_bi_traverse<'a, FnBrand, A: 'a + Clone, B: 'a + Clone, C: 'a + Clone, D: 'a + Clone, F: Applicative>( f: impl Fn(&A) -> <F as Kind_cdc7cd43dac7585f>::Of<'a, C> + 'a, g: impl Fn(&B) -> <F as Kind_cdc7cd43dac7585f>::Of<'a, D> + 'a, p: &<Self as Kind_266801a817966495>::Of<'a, A, B>, ) -> <F as Kind_cdc7cd43dac7585f>::Of<'a, <Self as Kind_266801a817966495>::Of<'a, C, D>>
where FnBrand: LiftFn + 'a, <Self as Kind_266801a817966495>::Of<'a, C, D>: Clone, <F as Kind_cdc7cd43dac7585f>::Of<'a, C>: Clone, <F as Kind_cdc7cd43dac7585f>::Of<'a, D>: Clone,

Traverses a tuple by reference with two effectful functions.

Applies f to a reference of the first element and g to a reference of the second element, combining the effects via lift2.

§Type Signature

forall A B C D F. Applicative F => (&A -> F C, &B -> F D, &Tuple2 A B) -> F (Tuple2 C D)

§Type Parameters
  • 'a: The lifetime of the values.
  • FnBrand: The brand of the cloneable function wrapper.
  • A: The type of the first element.
  • B: The type of the second element.
  • C: The output type for the first element.
  • D: The output type for the second element.
  • F: The applicative context.
§Parameters
  • f: The function applied to a reference of the first element.
  • g: The function applied to a reference of the second element.
  • p: The tuple to traverse by reference.
§Returns

lift2(|c, d| (c, d), f(&a), g(&b)).

§Examples
use fp_library::{
	brands::*,
	functions::*,
};

let x = (3, 5);
assert_eq!(
	explicit::bi_traverse::<RcFnBrand, Tuple2Brand, _, _, _, _, OptionBrand, _, _>(
		(|a: &i32| Some(a + 1), |b: &i32| Some(b * 2)),
		&x,
	),
	Some((4, 10))
);
Source§

fn ref_bi_sequence<'a, FnBrand, A: 'a + Clone, B: 'a + Clone, F: Applicative>( ta: &<Self as Kind_266801a817966495>::Of<'a, <F as Kind_cdc7cd43dac7585f>::Of<'a, A>, <F as Kind_cdc7cd43dac7585f>::Of<'a, B>>, ) -> <F as Kind_cdc7cd43dac7585f>::Of<'a, <Self as Kind_266801a817966495>::Of<'a, A, B>>
where FnBrand: LiftFn + 'a, <Self as Kind_266801a817966495>::Of<'a, A, B>: Clone, <F as Kind_cdc7cd43dac7585f>::Of<'a, A>: Clone, <F as Kind_cdc7cd43dac7585f>::Of<'a, B>: Clone,

Sequences a bitraversable structure containing applicative values by reference. Read more
Source§

impl Copy for Tuple2Brand

Source§

impl Eq for Tuple2Brand

Source§

impl StructuralPartialEq for Tuple2Brand

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts 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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts 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
Source§

impl<T> Pipe for T

Source§

fn pipe<B>(self, f: impl FnOnce(Self) -> B) -> B

Pipes self into a function, enabling left-to-right composition. Read more
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.