Skip to main content

Tuple2WithSecondBrand

Struct Tuple2WithSecondBrand 

Source
pub struct Tuple2WithSecondBrand<Second>(/* private fields */);
Expand description

Brand for (First, Second), with Second filled in (Functor over First).

Trait Implementations§

Source§

impl<Second: Clone + Semigroup + 'static> ApplyFirst for Tuple2WithSecondBrand<Second>

§Type Parameters
  • Second: The type of the second value in the tuple.
Source§

fn apply_first<'a, A: 'a + Clone, B: 'a + Clone>( fa: <Self as Kind_cdc7cd43dac7585f>::Of<'a, A>, fb: <Self as Kind_cdc7cd43dac7585f>::Of<'a, B>, ) -> <Self as Kind_cdc7cd43dac7585f>::Of<'a, A>

Combines two contexts, keeping the value from the first context. Read more
Source§

impl<Second: Clone + Semigroup + 'static> ApplySecond for Tuple2WithSecondBrand<Second>

§Type Parameters
  • Second: The type of the second value in the tuple.
Source§

fn apply_second<'a, A: 'a + Clone, B: 'a + Clone>( fa: <Self as Kind_cdc7cd43dac7585f>::Of<'a, A>, fb: <Self as Kind_cdc7cd43dac7585f>::Of<'a, B>, ) -> <Self as Kind_cdc7cd43dac7585f>::Of<'a, B>

Combines two contexts, keeping the value from the second context. Read more
Source§

impl<Second: Clone> Clone for Tuple2WithSecondBrand<Second>

Source§

fn clone(&self) -> Tuple2WithSecondBrand<Second>

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<Second: Debug> Debug for Tuple2WithSecondBrand<Second>

Source§

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

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

impl<Second: Default> Default for Tuple2WithSecondBrand<Second>

Source§

fn default() -> Tuple2WithSecondBrand<Second>

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

impl<Second: 'static> Foldable for Tuple2WithSecondBrand<Second>

§Type Parameters
  • Second: The type of the second value in the tuple.
Source§

fn fold_right<'a, FnBrand, A: 'a, B: 'a, F>( func: F, initial: B, fa: <Self as Kind_cdc7cd43dac7585f>::Of<'a, A>, ) -> B
where F: Fn(A, B) -> B + 'a, FnBrand: CloneableFn + 'a,

Folds the tuple from the right (over first).

This method performs a right-associative fold of the tuple (over first).

§Type Signature

forall Second A B. ((A, B) -> B, B, Tuple2WithSecond Second A) -> B

§Type Parameters
  • 'a: The lifetime of the values.
  • FnBrand: The brand of the cloneable function to use.
  • A: The type of the elements in the structure.
  • B: The type of the accumulator.
  • F: The type of the folding function.
§Parameters
  • func: The folding function.
  • initial: The initial value.
  • fa: The tuple to fold.
§Returns

func(a, initial).

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

assert_eq!(fold_right::<RcFnBrand, Tuple2WithSecondBrand<()>, _, _, _>(|x, acc| x + acc, 0, (5, ())), 5);
Source§

fn fold_left<'a, FnBrand, A: 'a, B: 'a, F>( func: F, initial: B, fa: <Self as Kind_cdc7cd43dac7585f>::Of<'a, A>, ) -> B
where F: Fn(B, A) -> B + 'a, FnBrand: CloneableFn + 'a,

Folds the tuple from the left (over first).

This method performs a left-associative fold of the tuple (over first).

§Type Signature

forall Second A B. ((B, A) -> B, B, Tuple2WithSecond Second A) -> B

§Type Parameters
  • 'a: The lifetime of the values.
  • FnBrand: The brand of the cloneable function to use.
  • A: The type of the elements in the structure.
  • B: The type of the accumulator.
  • F: The type of the folding function.
§Parameters
  • func: The folding function.
  • initial: The initial value.
  • fa: The tuple to fold.
§Returns

func(initial, a).

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

assert_eq!(fold_left::<RcFnBrand, Tuple2WithSecondBrand<()>, _, _, _>(|acc, x| acc + x, 0, (5, ())), 5);
Source§

fn fold_map<'a, FnBrand, A: 'a, M, Func>( func: Func, fa: <Self as Kind_cdc7cd43dac7585f>::Of<'a, A>, ) -> M
where M: Monoid + 'a, Func: Fn(A) -> M + 'a, FnBrand: CloneableFn + 'a,

Maps the value to a monoid and returns it (over first).

This method maps the element of the tuple to a monoid and then returns it (over first).

§Type Signature

forall Second A M. Monoid M => (A -> M, Tuple2WithSecond Second A) -> M

§Type Parameters
  • 'a: The lifetime of the values.
  • FnBrand: The brand of the cloneable function to use.
  • A: The type of the elements in the structure.
  • M: The type of the monoid.
  • Func: The type of the mapping function.
§Parameters
  • func: The mapping function.
  • fa: The tuple to fold.
§Returns

func(a).

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

assert_eq!(
    fold_map::<RcFnBrand, Tuple2WithSecondBrand<()>, _, _, _>(|x: i32| x.to_string(), (5, ())),
    "5".to_string()
);
Source§

impl<Second: 'static> Functor for Tuple2WithSecondBrand<Second>

§Type Parameters
  • Second: The type of the second value in the tuple.
Source§

fn map<'a, A: 'a, B: 'a, Func>( func: Func, fa: <Self as Kind_cdc7cd43dac7585f>::Of<'a, A>, ) -> <Self as Kind_cdc7cd43dac7585f>::Of<'a, B>
where Func: Fn(A) -> B + 'a,

Maps a function over the first value in the tuple.

This method applies a function to the first value inside the tuple, producing a new tuple with the transformed first value. The second value remains unchanged.

§Type Signature

forall Second A B. (A -> B, Tuple2WithSecond Second A) -> Tuple2WithSecond Second B

§Type Parameters
  • 'a: The lifetime of the values.
  • A: The type of the first value.
  • B: The type of the result of applying the function.
  • Func: The type of the function to apply.
§Parameters
  • func: The function to apply to the first value.
  • fa: The tuple to map over.
§Returns

A new tuple containing the result of applying the function to the first value.

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

assert_eq!(map::<Tuple2WithSecondBrand<_>, _, _, _>(|x: i32| x * 2, (5, 1)), (10, 1));
Source§

impl<Second: Hash> Hash for Tuple2WithSecondBrand<Second>

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<Second: 'static> Kind_cdc7cd43dac7585f for Tuple2WithSecondBrand<Second>

Generated implementation of Kind_cdc7cd43dac7585f for Tuple2WithSecondBrand < Second >.

Source§

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

The applied type.
Source§

impl<Second> Lift for Tuple2WithSecondBrand<Second>
where Second: Semigroup + Clone + 'static,

§Type Parameters
  • Second: The type of the second value in the tuple.
Source§

fn lift2<'a, A, B, C, Func>( func: Func, fa: <Self as Kind_cdc7cd43dac7585f>::Of<'a, A>, fb: <Self as Kind_cdc7cd43dac7585f>::Of<'a, B>, ) -> <Self as Kind_cdc7cd43dac7585f>::Of<'a, C>
where Func: Fn(A, B) -> C + 'a, A: Clone + 'a, B: Clone + 'a, C: 'a,

Lifts a binary function into the tuple context (over first).

This method lifts a binary function to operate on the first values within the tuple context. The second values are combined using their Semigroup implementation.

§Type Signature

forall Second A B C. Semigroup Second => ((A, B) -> C, Tuple2WithSecond Second A, Tuple2WithSecond Second B) -> Tuple2WithSecond Second C

§Type Parameters
  • 'a: The lifetime of the values.
  • A: The type of the first first value.
  • B: The type of the second first value.
  • C: The type of the result first value.
  • Func: The type of the binary function.
§Parameters
  • func: The binary function to apply to the first values.
  • fa: The first tuple.
  • fb: The second tuple.
§Returns

A new tuple where the first values are combined using f and the second values are combined using Semigroup::append.

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

assert_eq!(
    lift2::<Tuple2WithSecondBrand<String>, _, _, _, _>(|x, y| x + y, (1, "a".to_string()), (2, "b".to_string())),
    (3, "ab".to_string())
);
Source§

impl<Second: Ord> Ord for Tuple2WithSecondBrand<Second>

Source§

fn cmp(&self, other: &Tuple2WithSecondBrand<Second>) -> 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<Second: 'static> ParFoldable for Tuple2WithSecondBrand<Second>

§Type Parameters
  • Second: The type of the second value in the tuple.
Source§

fn par_fold_map<'a, FnBrand, A, M>( func: <FnBrand as SendCloneableFn>::SendOf<'a, A, M>, fa: <Self as Kind_cdc7cd43dac7585f>::Of<'a, A>, ) -> M
where FnBrand: 'a + SendCloneableFn, A: 'a + Clone + Send + Sync, M: Monoid + Send + Sync + 'a,

Maps the value to a monoid and returns it in parallel (over first).

This method maps the element of the tuple to a monoid and then returns it (over first). The mapping operation may be executed in parallel.

§Type Signature

forall Second A M. Monoid M => (A -> M, Tuple2WithSecond Second A) -> M

§Type Parameters
  • 'a: The lifetime of the values.
  • FnBrand: The brand of the cloneable function wrapper.
  • A: The element type.
  • M: The monoid type.
§Parameters
  • func: The thread-safe function to map each element to a monoid.
  • fa: The tuple to fold.
§Returns

The combined monoid value.

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

let x = (1, "a".to_string());
let f = send_cloneable_fn_new::<ArcFnBrand, _, _>(|x: i32| x.to_string());
assert_eq!(
    par_fold_map::<ArcFnBrand, Tuple2WithSecondBrand<String>, _, _>(f, x),
    "1".to_string()
);
Source§

fn par_fold_right<'a, FnBrand, A, B>( func: <FnBrand as SendCloneableFn>::SendOf<'a, (A, B), B>, initial: B, fa: <Self as Kind_cdc7cd43dac7585f>::Of<'a, A>, ) -> B
where FnBrand: 'a + SendCloneableFn, A: 'a + Clone + Send + Sync, B: Send + Sync + 'a,

Folds the tuple from the right in parallel (over first).

This method folds the tuple by applying a function from right to left, potentially in parallel (over first).

§Type Signature

forall Second A B. ((A, B) -> B, B, Tuple2WithSecond Second A) -> B

§Type Parameters
  • 'a: The lifetime of the values.
  • FnBrand: The brand of the cloneable function wrapper.
  • A: The element type.
  • B: The accumulator type.
§Parameters
  • func: The thread-safe function to apply to each element and the accumulator.
  • initial: The initial value.
  • fa: The tuple to fold.
§Returns

The final accumulator value.

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

let x = (1, "a".to_string());
let f = send_cloneable_fn_new::<ArcFnBrand, _, _>(|(a, b): (i32, i32)| a + b);
assert_eq!(par_fold_right::<ArcFnBrand, Tuple2WithSecondBrand<String>, _, _>(f, 10, x), 11);
Source§

impl<Second: PartialEq> PartialEq for Tuple2WithSecondBrand<Second>

Source§

fn eq(&self, other: &Tuple2WithSecondBrand<Second>) -> 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<Second: PartialOrd> PartialOrd for Tuple2WithSecondBrand<Second>

Source§

fn partial_cmp(&self, other: &Tuple2WithSecondBrand<Second>) -> 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<Second> Pointed for Tuple2WithSecondBrand<Second>
where Second: Monoid + Clone + 'static,

§Type Parameters
  • Second: The type of the second value in the tuple.
Source§

fn pure<'a, A: 'a>(a: A) -> <Self as Kind_cdc7cd43dac7585f>::Of<'a, A>

Wraps a value in a tuple (with empty second).

This method wraps a value in a tuple, using the Monoid::empty() value for the second element.

§Type Signature

forall Second A. Monoid Second => A -> Tuple2WithSecond Second A

§Type Parameters
  • 'a: The lifetime of the value.
  • A: The type of the value to wrap.
§Parameters
  • a: The value to wrap.
§Returns

A tuple containing a and the empty value of the second type.

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

assert_eq!(pure::<Tuple2WithSecondBrand<String>, _>(5), (5, "".to_string()));
Source§

impl<Second> Semiapplicative for Tuple2WithSecondBrand<Second>
where Second: Semigroup + Clone + 'static,

§Type Parameters
  • Second: The type of the second value in the tuple.
Source§

fn apply<'a, FnBrand: 'a + CloneableFn, A: 'a + Clone, B: 'a>( ff: <Self as Kind_cdc7cd43dac7585f>::Of<'a, <FnBrand as CloneableFn>::Of<'a, A, B>>, fa: <Self as Kind_cdc7cd43dac7585f>::Of<'a, A>, ) -> <Self as Kind_cdc7cd43dac7585f>::Of<'a, B>

Applies a wrapped function to a wrapped value (over first).

This method applies a function wrapped in a tuple to a value wrapped in a tuple. The second values are combined using their Semigroup implementation.

§Type Signature

forall Second A B. Semigroup Second => (Tuple2WithSecond Second (A -> B), Tuple2WithSecond Second A) -> Tuple2WithSecond Second B

§Type Parameters
  • 'a: The lifetime of the values.
  • FnBrand: The brand of the cloneable function wrapper.
  • A: The type of the input value.
  • B: The type of the output value.
§Parameters
  • ff: The tuple containing the function.
  • fa: The tuple containing the value.
§Returns

A new tuple where the function is applied to the first value and the second values are combined.

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

let f = (cloneable_fn_new::<RcFnBrand, _, _>(|x: i32| x * 2), "a".to_string());
assert_eq!(apply::<RcFnBrand, Tuple2WithSecondBrand<String>, _, _>(f, (5, "b".to_string())), (10, "ab".to_string()));
Source§

impl<Second> Semimonad for Tuple2WithSecondBrand<Second>
where Second: Semigroup + Clone + 'static,

§Type Parameters
  • Second: The type of the second value in the tuple.
Source§

fn bind<'a, A: 'a, B: 'a, Func>( ma: <Self as Kind_cdc7cd43dac7585f>::Of<'a, A>, func: Func, ) -> <Self as Kind_cdc7cd43dac7585f>::Of<'a, B>
where Func: Fn(A) -> <Self as Kind_cdc7cd43dac7585f>::Of<'a, B> + 'a,

Chains tuple computations (over first).

This method chains two computations, where the second computation depends on the result of the first. The second values are combined using their Semigroup implementation.

§Type Signature

forall Second A B. Semigroup Second => (Tuple2WithSecond Second A, A -> Tuple2WithSecond Second B) -> Tuple2WithSecond Second B

§Type Parameters
  • 'a: The lifetime of the values.
  • A: The type of the result of the first computation.
  • B: The type of the result of the second computation.
  • Func: The type of the function to apply.
§Parameters
  • ma: The first tuple.
  • func: The function to apply to the first value.
§Returns

A new tuple where the second values are combined.

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

assert_eq!(
    bind::<Tuple2WithSecondBrand<String>, _, _, _>((5, "a".to_string()), |x| (x * 2, "b".to_string())),
    (10, "ab".to_string())
);
Source§

impl<Second: Clone + 'static> Traversable for Tuple2WithSecondBrand<Second>

§Type Parameters
  • Second: The type of the second value in the tuple.
Source§

fn traverse<'a, A: 'a + Clone, B: 'a + Clone, F: Applicative, Func>( func: Func, ta: <Self as Kind_cdc7cd43dac7585f>::Of<'a, A>, ) -> <F as Kind_cdc7cd43dac7585f>::Of<'a, <Self as Kind_cdc7cd43dac7585f>::Of<'a, B>>
where Func: Fn(A) -> <F as Kind_cdc7cd43dac7585f>::Of<'a, B> + 'a, <Self as Kind_cdc7cd43dac7585f>::Of<'a, B>: Clone,

Traverses the tuple with an applicative function (over first).

This method maps the element of the tuple to a computation, evaluates it, and combines the result into an applicative context (over first).

§Type Signature

forall Second A B F. Applicative F => (A -> F B, Tuple2WithSecond Second A) -> F (Tuple2WithSecond Second B)

§Type Parameters
  • 'a: The lifetime of the values.
  • A: The type of the elements in the traversable structure.
  • B: The type of the elements in the resulting traversable structure.
  • F: The applicative context.
  • Func: The type of the function to apply.
§Parameters
  • func: The function to apply.
  • ta: The tuple to traverse.
§Returns

The tuple wrapped in the applicative context.

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

assert_eq!(
    traverse::<Tuple2WithSecondBrand<()>, _, _, OptionBrand, _>(|x| Some(x * 2), (5, ())),
    Some((10, ()))
);
Source§

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

Sequences a tuple of applicative (over first).

This method evaluates the computation inside the tuple and accumulates the result into an applicative context (over first).

§Type Signature

forall Second A F. Applicative F => Tuple2WithSecond Second (F A) -> F (Tuple2WithSecond Second A)

§Type Parameters
  • 'a: The lifetime of the values.
  • A: The type of the elements in the traversable structure.
  • F: The applicative context.
§Parameters
  • ta: The tuple containing the applicative value.
§Returns

The tuple wrapped in the applicative context.

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

assert_eq!(
    sequence::<Tuple2WithSecondBrand<()>, _, OptionBrand>((Some(5), ())),
    Some((5, ()))
);
Source§

impl<Second: Copy> Copy for Tuple2WithSecondBrand<Second>

Source§

impl<Second: Eq> Eq for Tuple2WithSecondBrand<Second>

Source§

impl<Second> StructuralPartialEq for Tuple2WithSecondBrand<Second>

Auto Trait Implementations§

§

impl<Second> Freeze for Tuple2WithSecondBrand<Second>
where Second: Freeze,

§

impl<Second> RefUnwindSafe for Tuple2WithSecondBrand<Second>
where Second: RefUnwindSafe,

§

impl<Second> Send for Tuple2WithSecondBrand<Second>
where Second: Send,

§

impl<Second> Sync for Tuple2WithSecondBrand<Second>
where Second: Sync,

§

impl<Second> Unpin for Tuple2WithSecondBrand<Second>
where Second: Unpin,

§

impl<Second> UnwindSafe for Tuple2WithSecondBrand<Second>
where Second: UnwindSafe,

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

impl<Brand> Applicative for Brand

Source§

impl<Brand> Monad for Brand
where Brand: Applicative + Semimonad,