pub struct OptionBrand;Expand description
Brand for Option.
Trait Implementations§
Source§impl Alt for OptionBrand
impl Alt for OptionBrand
Source§fn alt<'a, A: 'a>(
fa1: <Self as Kind_cdc7cd43dac7585f>::Of<'a, A>,
fa2: <Self as Kind_cdc7cd43dac7585f>::Of<'a, A>,
) -> <Self as Kind_cdc7cd43dac7585f>::Of<'a, A>
fn alt<'a, A: 'a>( fa1: <Self as Kind_cdc7cd43dac7585f>::Of<'a, A>, fa2: <Self as Kind_cdc7cd43dac7585f>::Of<'a, A>, ) -> <Self as Kind_cdc7cd43dac7585f>::Of<'a, A>
Chooses between two options.
Returns the first Some value, or None if both are None.
§Type Signature
forall A. (Option A, Option A) -> Option A
§Type Parameters
'a: The lifetime of the values.A: The type of the value.
§Parameters
fa1: The first option.fa2: The second option.
§Returns
The first Some value, or None.
§Examples
use fp_library::{
brands::*,
classes::*,
functions::*,
};
assert_eq!(alt::<OptionBrand, _>(None, Some(5)), Some(5));
assert_eq!(alt::<OptionBrand, _>(Some(3), Some(5)), Some(3));
assert_eq!(alt::<OptionBrand, _>(None::<i32>, None), None);Source§impl ApplyFirst for OptionBrand
impl ApplyFirst for OptionBrand
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>
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>
Source§impl ApplySecond for OptionBrand
impl ApplySecond for OptionBrand
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>
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>
Source§impl Clone for OptionBrand
impl Clone for OptionBrand
Source§fn clone(&self) -> OptionBrand
fn clone(&self) -> OptionBrand
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Compactable for OptionBrand
impl Compactable for OptionBrand
Source§fn compact<'a, A: 'a>(
fa: <Self as Kind_cdc7cd43dac7585f>::Of<'a, <OptionBrand as Kind_cdc7cd43dac7585f>::Of<'a, A>>,
) -> <Self as Kind_cdc7cd43dac7585f>::Of<'a, A>
fn compact<'a, A: 'a>( fa: <Self as Kind_cdc7cd43dac7585f>::Of<'a, <OptionBrand as Kind_cdc7cd43dac7585f>::Of<'a, A>>, ) -> <Self as Kind_cdc7cd43dac7585f>::Of<'a, A>
Compacts a nested option.
This method flattens a nested option.
§Type Signature
forall A. Option (Option A) -> Option A
§Type Parameters
'a: The lifetime of the values.A: The type of the elements.
§Parameters
fa: The nested option.
§Returns
The flattened option.
§Examples
use fp_library::{
brands::OptionBrand,
functions::*,
};
let x = Some(Some(5));
let y = compact::<OptionBrand, _>(x);
assert_eq!(y, Some(5));Source§fn separate<'a, E: 'a, O: 'a>(
fa: <Self as Kind_cdc7cd43dac7585f>::Of<'a, Result<O, E>>,
) -> (<Self as Kind_cdc7cd43dac7585f>::Of<'a, E>, <Self as Kind_cdc7cd43dac7585f>::Of<'a, O>)
fn separate<'a, E: 'a, O: 'a>( fa: <Self as Kind_cdc7cd43dac7585f>::Of<'a, Result<O, E>>, ) -> (<Self as Kind_cdc7cd43dac7585f>::Of<'a, E>, <Self as Kind_cdc7cd43dac7585f>::Of<'a, O>)
Separates an option of result.
This method separates an option of result into a pair of options.
§Type Signature
forall E O. Option (Result O E) -> (Option E, Option O)
§Type Parameters
'a: The lifetime of the values.E: The type of the error value.O: The type of the success value.
§Parameters
fa: The option of result.
§Returns
A pair of options.
§Examples
use fp_library::{
brands::*,
functions::*,
};
let x: Option<Result<i32, &str>> = Some(Ok(5));
let (errs, oks) = separate::<OptionBrand, _, _>(x);
assert_eq!(oks, Some(5));
assert_eq!(errs, None);Source§impl Debug for OptionBrand
impl Debug for OptionBrand
Source§impl Default for OptionBrand
impl Default for OptionBrand
Source§fn default() -> OptionBrand
fn default() -> OptionBrand
Source§impl Filterable for OptionBrand
impl Filterable for OptionBrand
Source§fn partition_map<'a, A: 'a, E: 'a, O: 'a>(
func: impl Fn(A) -> Result<O, E> + 'a,
fa: <Self as Kind_cdc7cd43dac7585f>::Of<'a, A>,
) -> (<Self as Kind_cdc7cd43dac7585f>::Of<'a, E>, <Self as Kind_cdc7cd43dac7585f>::Of<'a, O>)
fn partition_map<'a, A: 'a, E: 'a, O: 'a>( func: impl Fn(A) -> Result<O, E> + 'a, fa: <Self as Kind_cdc7cd43dac7585f>::Of<'a, A>, ) -> (<Self as Kind_cdc7cd43dac7585f>::Of<'a, E>, <Self as Kind_cdc7cd43dac7585f>::Of<'a, O>)
Partitions an option based on a function that returns a result.
This method partitions an option based on a function that returns a result.
§Type Signature
forall A E O. (A -> Result O E, Option A) -> (Option E, Option O)
§Type Parameters
'a: The lifetime of the values.A: The type of the input value.E: The type of the error value.O: The type of the success value.
§Parameters
func: The function to apply.fa: The option to partition.
§Returns
A pair of options.
§Examples
use fp_library::{
brands::*,
functions::*,
};
let x = Some(5);
let (errs, oks) =
partition_map::<OptionBrand, _, _, _>(|a| if a > 2 { Ok(a) } else { Err(a) }, x);
assert_eq!(oks, Some(5));
assert_eq!(errs, None);Source§fn partition<'a, A: 'a + Clone>(
func: impl Fn(A) -> bool + 'a,
fa: <Self as Kind_cdc7cd43dac7585f>::Of<'a, A>,
) -> (<Self as Kind_cdc7cd43dac7585f>::Of<'a, A>, <Self as Kind_cdc7cd43dac7585f>::Of<'a, A>)
fn partition<'a, A: 'a + Clone>( func: impl Fn(A) -> bool + 'a, fa: <Self as Kind_cdc7cd43dac7585f>::Of<'a, A>, ) -> (<Self as Kind_cdc7cd43dac7585f>::Of<'a, A>, <Self as Kind_cdc7cd43dac7585f>::Of<'a, A>)
Partitions an option based on a predicate.
This method partitions an option based on a predicate.
§Type Signature
forall A. (A -> bool, Option A) -> (Option A, Option A)
§Type Parameters
'a: The lifetime of the values.A: The type of the elements.
§Parameters
func: The predicate.fa: The option to partition.
§Returns
A pair of options.
§Examples
use fp_library::{
brands::*,
functions::*,
};
let x = Some(5);
let (not_satisfied, satisfied) = partition::<OptionBrand, _>(|a| a > 2, x);
assert_eq!(satisfied, Some(5));
assert_eq!(not_satisfied, None);Source§fn filter_map<'a, A: 'a, B: 'a>(
func: impl Fn(A) -> Option<B> + 'a,
fa: <Self as Kind_cdc7cd43dac7585f>::Of<'a, A>,
) -> <Self as Kind_cdc7cd43dac7585f>::Of<'a, B>
fn filter_map<'a, A: 'a, B: 'a>( func: impl Fn(A) -> Option<B> + 'a, fa: <Self as Kind_cdc7cd43dac7585f>::Of<'a, A>, ) -> <Self as Kind_cdc7cd43dac7585f>::Of<'a, B>
Maps a function over an option and filters out None results.
This method maps a function over an option and filters out None results.
§Type Signature
forall A B. (A -> Option B, Option A) -> Option B
§Type Parameters
'a: The lifetime of the values.A: The type of the input value.B: The type of the result of applying the function.
§Parameters
func: The function to apply.fa: The option to filter and map.
§Returns
The filtered and mapped option.
§Examples
use fp_library::{
brands::OptionBrand,
functions::*,
};
let x = Some(5);
let y = filter_map::<OptionBrand, _, _>(|a| if a > 2 { Some(a * 2) } else { None }, x);
assert_eq!(y, Some(10));Source§fn filter<'a, A: 'a + Clone>(
func: impl Fn(A) -> bool + 'a,
fa: <Self as Kind_cdc7cd43dac7585f>::Of<'a, A>,
) -> <Self as Kind_cdc7cd43dac7585f>::Of<'a, A>
fn filter<'a, A: 'a + Clone>( func: impl Fn(A) -> bool + 'a, fa: <Self as Kind_cdc7cd43dac7585f>::Of<'a, A>, ) -> <Self as Kind_cdc7cd43dac7585f>::Of<'a, A>
Filters an option based on a predicate.
This method filters an option based on a predicate.
§Type Signature
forall A. (A -> bool, Option A) -> Option A
§Type Parameters
'a: The lifetime of the values.A: The type of the elements.
§Parameters
func: The predicate.fa: The option to filter.
§Returns
The filtered option.
§Examples
use fp_library::{
brands::OptionBrand,
functions::*,
};
let x = Some(5);
let y = filter::<OptionBrand, _>(|a| a > 2, x);
assert_eq!(y, Some(5));Source§impl Foldable for OptionBrand
impl Foldable for OptionBrand
Source§fn fold_right<'a, FnBrand, A: 'a + Clone, B: 'a>(
func: impl Fn(A, B) -> B + 'a,
initial: B,
fa: <Self as Kind_cdc7cd43dac7585f>::Of<'a, A>,
) -> Bwhere
FnBrand: CloneableFn + 'a,
fn fold_right<'a, FnBrand, A: 'a + Clone, B: 'a>(
func: impl Fn(A, B) -> B + 'a,
initial: B,
fa: <Self as Kind_cdc7cd43dac7585f>::Of<'a, A>,
) -> Bwhere
FnBrand: CloneableFn + 'a,
Folds the option from the right.
This method performs a right-associative fold of the option. If the option is Some(a), it applies the function to a and the initial value. If None, it returns the initial value.
§Type Signature
forall A B. ((A, B) -> B, B, Option 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.
§Parameters
func: The folding function.initial: The initial value.fa: The option to fold.
§Returns
func(a, initial) if fa is Some(a), otherwise initial.
§Examples
use fp_library::{
brands::*,
functions::*,
};
let x = Some(5);
let y = fold_right::<RcFnBrand, OptionBrand, _, _>(|a, b| a + b, 10, x);
assert_eq!(y, 15);Source§fn fold_left<'a, FnBrand, A: 'a + Clone, B: 'a>(
func: impl Fn(B, A) -> B + 'a,
initial: B,
fa: <Self as Kind_cdc7cd43dac7585f>::Of<'a, A>,
) -> Bwhere
FnBrand: CloneableFn + 'a,
fn fold_left<'a, FnBrand, A: 'a + Clone, B: 'a>(
func: impl Fn(B, A) -> B + 'a,
initial: B,
fa: <Self as Kind_cdc7cd43dac7585f>::Of<'a, A>,
) -> Bwhere
FnBrand: CloneableFn + 'a,
Folds the option from the left.
This method performs a left-associative fold of the option. If the option is Some(a), it applies the function to the initial value and a. If None, it returns the initial value.
§Type Signature
forall A B. ((B, A) -> B, B, Option 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.
§Parameters
func: The function to apply to the accumulator and each element.initial: The initial value of the accumulator.fa: The option to fold.
§Returns
f(initial, a) if fa is Some(a), otherwise initial.
§Examples
use fp_library::{
brands::*,
functions::*,
};
let x = Some(5);
let y = fold_left::<RcFnBrand, OptionBrand, _, _>(|b, a| b + a, 10, x);
assert_eq!(y, 15);Source§fn fold_map<'a, FnBrand, A: 'a + Clone, M>(
func: impl Fn(A) -> M + 'a,
fa: <Self as Kind_cdc7cd43dac7585f>::Of<'a, A>,
) -> Mwhere
M: Monoid + 'a,
FnBrand: CloneableFn + 'a,
fn fold_map<'a, FnBrand, A: 'a + Clone, M>(
func: impl Fn(A) -> M + 'a,
fa: <Self as Kind_cdc7cd43dac7585f>::Of<'a, A>,
) -> Mwhere
M: Monoid + 'a,
FnBrand: CloneableFn + 'a,
Maps the value to a monoid and returns it, or returns empty.
This method maps the element of the option to a monoid. If the option is None, it returns the monoid’s identity element.
§Type Signature
forall A M. Monoid M => (A -> M, Option 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.
§Parameters
func: The mapping function.fa: The option to fold.
§Returns
func(a) if fa is Some(a), otherwise M::empty().
§Examples
use fp_library::{
brands::*,
functions::*,
};
let x = Some(5);
let y = fold_map::<RcFnBrand, OptionBrand, _, _>(|a: i32| a.to_string(), x);
assert_eq!(y, "5".to_string());Source§impl FoldableWithIndex for OptionBrand
impl FoldableWithIndex for OptionBrand
Source§fn fold_map_with_index<'a, A: 'a + Clone, R: Monoid>(
f: impl Fn((), A) -> R + 'a,
fa: Option<A>,
) -> R
fn fold_map_with_index<'a, A: 'a + Clone, R: Monoid>( f: impl Fn((), A) -> R + 'a, fa: Option<A>, ) -> R
Folds the option using a monoid, providing the index ().
§Type Signature
forall A R. Monoid R => (((), A) -> R, Option A) -> R
§Type Parameters
'a: The lifetime of the value.A: The type of the value inside the option.R: The monoid type.
§Parameters
f: The function to apply to the value and its index.fa: The option to fold.
§Returns
The monoid value.
§Examples
use fp_library::{
brands::OptionBrand,
classes::foldable_with_index::FoldableWithIndex,
functions::*,
};
let x = Some(5);
let y = <OptionBrand as FoldableWithIndex>::fold_map_with_index(|_, i: i32| i.to_string(), x);
assert_eq!(y, "5".to_string());Source§impl Functor for OptionBrand
impl Functor for OptionBrand
Source§fn map<'a, A: 'a, B: 'a>(
func: impl Fn(A) -> B + 'a,
fa: <Self as Kind_cdc7cd43dac7585f>::Of<'a, A>,
) -> <Self as Kind_cdc7cd43dac7585f>::Of<'a, B>
fn map<'a, A: 'a, B: 'a>( func: impl Fn(A) -> B + 'a, fa: <Self as Kind_cdc7cd43dac7585f>::Of<'a, A>, ) -> <Self as Kind_cdc7cd43dac7585f>::Of<'a, B>
Maps a function over the value in the option.
This method applies a function to the value inside the option, producing a new option with the transformed value. If the option is None, it returns None.
§Type Signature
forall A B. (A -> B, Option A) -> Option B
§Type Parameters
'a: The lifetime of the value.A: The type of the value inside the option.B: The type of the result of applying the function.
§Parameters
func: The function to apply to the value.fa: The option to map over.
§Returns
A new option containing the result of applying the function, or None.
§Examples
use fp_library::{
brands::*,
functions::*,
};
let x = Some(5);
let y = map::<OptionBrand, _, _>(|i| i * 2, x);
assert_eq!(y, Some(10));Source§impl FunctorWithIndex for OptionBrand
impl FunctorWithIndex for OptionBrand
Source§fn map_with_index<'a, A: 'a, B: 'a>(
f: impl Fn((), A) -> B + 'a,
fa: Option<A>,
) -> Option<B>
fn map_with_index<'a, A: 'a, B: 'a>( f: impl Fn((), A) -> B + 'a, fa: Option<A>, ) -> Option<B>
Maps a function over the value in the option, providing the index ().
§Type Signature
forall A B. (((), A) -> B, Option A) -> Option B
§Type Parameters
'a: The lifetime of the value.A: The type of the value inside the option.B: The type of the result of applying the function.
§Parameters
f: The function to apply to the value and its index.fa: The option to map over.
§Returns
A new option containing the result of applying the function, or None.
§Examples
use fp_library::{
brands::OptionBrand,
classes::functor_with_index::FunctorWithIndex,
functions::*,
};
let x = Some(5);
let y = <OptionBrand as FunctorWithIndex>::map_with_index(|_, i| i * 2, x);
assert_eq!(y, Some(10));Source§impl Hash for OptionBrand
impl Hash for OptionBrand
Source§impl Kind_cdc7cd43dac7585f for OptionBrand
Generated implementation of Kind_cdc7cd43dac7585f for OptionBrand.
impl Kind_cdc7cd43dac7585f for OptionBrand
Generated implementation of Kind_cdc7cd43dac7585f for OptionBrand.
Source§impl Lift for OptionBrand
impl Lift for OptionBrand
Source§fn lift2<'a, A, B, C>(
func: impl Fn(A, B) -> C + 'a,
fa: <Self as Kind_cdc7cd43dac7585f>::Of<'a, A>,
fb: <Self as Kind_cdc7cd43dac7585f>::Of<'a, B>,
) -> <Self as Kind_cdc7cd43dac7585f>::Of<'a, C>where
A: 'a,
B: 'a,
C: 'a,
fn lift2<'a, A, B, C>(
func: impl Fn(A, B) -> C + 'a,
fa: <Self as Kind_cdc7cd43dac7585f>::Of<'a, A>,
fb: <Self as Kind_cdc7cd43dac7585f>::Of<'a, B>,
) -> <Self as Kind_cdc7cd43dac7585f>::Of<'a, C>where
A: 'a,
B: 'a,
C: 'a,
Lifts a binary function into the option context.
This method lifts a binary function to operate on values within the option context.
§Type Signature
forall A B C. ((A, B) -> C, Option A, Option B) -> Option C
§Type Parameters
'a: The lifetime of the values.A: The type of the first option’s value.B: The type of the second option’s value.C: The return type of the function.
§Parameters
func: The binary function to apply.fa: The first option.fb: The second option.
§Returns
Some(f(a, b)) if both options are Some, otherwise None.
§Examples
use fp_library::{
brands::*,
functions::*,
};
let x = Some(1);
let y = Some(2);
let z = lift2::<OptionBrand, _, _, _>(|a, b| a + b, x, y);
assert_eq!(z, Some(3));Source§impl MonadRec for OptionBrand
impl MonadRec for OptionBrand
Source§fn tail_rec_m<'a, A: 'a, B: 'a>(
func: impl Fn(A) -> <Self as Kind_cdc7cd43dac7585f>::Of<'a, ControlFlow<B, A>> + 'a,
initial: A,
) -> <Self as Kind_cdc7cd43dac7585f>::Of<'a, B>
fn tail_rec_m<'a, A: 'a, B: 'a>( func: impl Fn(A) -> <Self as Kind_cdc7cd43dac7585f>::Of<'a, ControlFlow<B, A>> + 'a, initial: A, ) -> <Self as Kind_cdc7cd43dac7585f>::Of<'a, B>
Performs tail-recursive monadic computation over Option.
Iteratively applies the step function. If the function returns None,
the computation short-circuits. If it returns Some(ControlFlow::Continue(a)), the
loop continues with the new state. If it returns Some(ControlFlow::Break(b)),
the computation completes with Some(b).
§Type Signature
forall A B. (A -> Option (ControlFlow B A), A) -> Option B
§Type Parameters
'a: The lifetime of the computation.A: The type of the initial value and loop state.B: The type of the result.
§Parameters
func: The step function.initial: The initial value.
§Returns
The result of the computation, or None if the step function returned None.
§Examples
use {
core::ops::ControlFlow,
fp_library::{
brands::*,
functions::*,
types::*,
},
};
let result = tail_rec_m::<OptionBrand, _, _>(
|n| {
if n < 10 { Some(ControlFlow::Continue(n + 1)) } else { Some(ControlFlow::Break(n)) }
},
0,
);
assert_eq!(result, Some(10));Source§impl Ord for OptionBrand
impl Ord for OptionBrand
Source§fn cmp(&self, other: &OptionBrand) -> Ordering
fn cmp(&self, other: &OptionBrand) -> Ordering
1.21.0 · Source§fn max(self, other: Self) -> Selfwhere
Self: Sized,
fn max(self, other: Self) -> Selfwhere
Self: Sized,
Source§impl PartialEq for OptionBrand
impl PartialEq for OptionBrand
Source§impl PartialOrd for OptionBrand
impl PartialOrd for OptionBrand
Source§impl Plus for OptionBrand
impl Plus for OptionBrand
Source§fn empty<'a, A: 'a>() -> <Self as Kind_cdc7cd43dac7585f>::Of<'a, A>
fn empty<'a, A: 'a>() -> <Self as Kind_cdc7cd43dac7585f>::Of<'a, A>
Returns None, the identity element for alt.
§Type Signature
forall A. () -> Option A
§Type Parameters
'a: The lifetime of the value.A: The type of the value.
§Returns
None.
§Examples
use fp_library::{
brands::*,
functions::*,
};
let x: Option<i32> = plus_empty::<OptionBrand, i32>();
assert_eq!(x, None);Source§impl Pointed for OptionBrand
impl Pointed for OptionBrand
Source§fn pure<'a, A: 'a>(a: A) -> <Self as Kind_cdc7cd43dac7585f>::Of<'a, A>
fn pure<'a, A: 'a>(a: A) -> <Self as Kind_cdc7cd43dac7585f>::Of<'a, A>
Wraps a value in an option.
This method wraps a value in an option context.
§Type Signature
forall A. A -> Option A
§Type Parameters
'a: The lifetime of the value.A: The type of the value to wrap.
§Parameters
a: The value to wrap.
§Returns
Some(a).
§Examples
use fp_library::{
brands::OptionBrand,
functions::*,
};
let x = pure::<OptionBrand, _>(5);
assert_eq!(x, Some(5));Source§impl Semiapplicative for OptionBrand
impl Semiapplicative for OptionBrand
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>
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.
This method applies a function wrapped in an option to a value wrapped in an option.
§Type Signature
forall A B. (Option (A -> B), Option A) -> Option 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 option containing the function.fa: The option containing the value.
§Returns
Some(f(a)) if both are Some, otherwise None.
§Examples
use fp_library::{
brands::*,
classes::*,
functions::*,
};
let f = Some(cloneable_fn_new::<RcFnBrand, _, _>(|x: i32| x * 2));
let x = Some(5);
let y = apply::<RcFnBrand, OptionBrand, _, _>(f, x);
assert_eq!(y, Some(10));Source§impl Semimonad for OptionBrand
impl Semimonad for OptionBrand
Source§fn bind<'a, A: 'a, B: 'a>(
ma: <Self as Kind_cdc7cd43dac7585f>::Of<'a, A>,
func: impl Fn(A) -> <Self as Kind_cdc7cd43dac7585f>::Of<'a, B> + 'a,
) -> <Self as Kind_cdc7cd43dac7585f>::Of<'a, B>
fn bind<'a, A: 'a, B: 'a>( ma: <Self as Kind_cdc7cd43dac7585f>::Of<'a, A>, func: impl Fn(A) -> <Self as Kind_cdc7cd43dac7585f>::Of<'a, B> + 'a, ) -> <Self as Kind_cdc7cd43dac7585f>::Of<'a, B>
Chains option computations.
This method chains two option computations, where the second computation depends on the result of the first.
§Type Signature
forall A B. (Option A, A -> Option B) -> Option 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.
§Parameters
ma: The first option.func: The function to apply to the value inside the option.
§Returns
The result of applying f to the value if ma is Some, otherwise None.
§Examples
use fp_library::{
brands::OptionBrand,
functions::*,
};
let x = Some(5);
let y = bind::<OptionBrand, _, _>(x, |i| Some(i * 2));
assert_eq!(y, Some(10));Source§impl Traversable for OptionBrand
impl Traversable for OptionBrand
Source§fn traverse<'a, A: 'a + Clone, B: 'a + Clone, F: Applicative>(
func: impl Fn(A) -> <F as Kind_cdc7cd43dac7585f>::Of<'a, B> + 'a,
ta: <Self as Kind_cdc7cd43dac7585f>::Of<'a, A>,
) -> <F as Kind_cdc7cd43dac7585f>::Of<'a, <Self as Kind_cdc7cd43dac7585f>::Of<'a, B>>
fn traverse<'a, A: 'a + Clone, B: 'a + Clone, F: Applicative>( func: impl Fn(A) -> <F as Kind_cdc7cd43dac7585f>::Of<'a, B> + 'a, ta: <Self as Kind_cdc7cd43dac7585f>::Of<'a, A>, ) -> <F as Kind_cdc7cd43dac7585f>::Of<'a, <Self as Kind_cdc7cd43dac7585f>::Of<'a, B>>
Traverses the option with an applicative function.
This method maps the element of the option to a computation, evaluates it, and wraps the result in the applicative context. If None, it returns pure(None).
§Type Signature
forall A B F. Applicative F => (A -> F B, Option A) -> F (Option 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.
§Parameters
func: The function to apply to each element, returning a value in an applicative context.ta: The option to traverse.
§Returns
The option wrapped in the applicative context.
§Examples
use fp_library::{
brands::OptionBrand,
functions::*,
};
let x = Some(5);
let y = traverse::<OptionBrand, _, _, OptionBrand>(|a| Some(a * 2), x);
assert_eq!(y, Some(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,
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 an option of applicative.
This method evaluates the computation inside the option and wraps the result in the applicative context. If None, it returns pure(None).
§Type Signature
forall A F. Applicative F => Option (F A) -> F (Option 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 option containing the applicative value.
§Returns
The result of the traversal.
§Returns
The option wrapped in the applicative context.
§Examples
use fp_library::{
brands::OptionBrand,
functions::*,
};
let x = Some(Some(5));
let y = sequence::<OptionBrand, _, OptionBrand>(x);
assert_eq!(y, Some(Some(5)));Source§impl TraversableWithIndex for OptionBrand
impl TraversableWithIndex for OptionBrand
Source§fn traverse_with_index<'a, A: 'a, B: 'a + Clone, M: Applicative>(
f: impl Fn((), A) -> M::Of<'a, B> + 'a,
ta: Option<A>,
) -> M::Of<'a, Option<B>>
fn traverse_with_index<'a, A: 'a, B: 'a + Clone, M: Applicative>( f: impl Fn((), A) -> M::Of<'a, B> + 'a, ta: Option<A>, ) -> M::Of<'a, Option<B>>
Traverses the option with an applicative function, providing the index ().
§Type Signature
forall A B M. Applicative M => (((), A) -> M B, Option A) -> M (Option B)
§Type Parameters
'a: The lifetime of the value.A: The type of the value inside the option.B: The type of the result.M: The applicative context.
§Parameters
f: The function to apply to the value and its index, returning a value in an applicative context.ta: The option to traverse.
§Returns
The option wrapped in the applicative context.
§Examples
use fp_library::{
brands::OptionBrand,
classes::traversable_with_index::TraversableWithIndex,
functions::*,
};
let x = Some(5);
let y = <OptionBrand as TraversableWithIndex>::traverse_with_index::<i32, i32, OptionBrand>(
|_, i| Some(i * 2),
x,
);
assert_eq!(y, Some(Some(10)));Source§impl Witherable for OptionBrand
impl Witherable for OptionBrand
Source§fn wilt<'a, M: Applicative, A: 'a + Clone, E: 'a + Clone, O: 'a + Clone>(
func: impl Fn(A) -> <M as Kind_cdc7cd43dac7585f>::Of<'a, Result<O, E>> + 'a,
ta: <Self as Kind_cdc7cd43dac7585f>::Of<'a, A>,
) -> <M as Kind_cdc7cd43dac7585f>::Of<'a, (<Self as Kind_cdc7cd43dac7585f>::Of<'a, E>, <Self as Kind_cdc7cd43dac7585f>::Of<'a, O>)>where
<Self as Kind_cdc7cd43dac7585f>::Of<'a, Result<O, E>>: Clone,
<M as Kind_cdc7cd43dac7585f>::Of<'a, Result<O, E>>: Clone,
fn wilt<'a, M: Applicative, A: 'a + Clone, E: 'a + Clone, O: 'a + Clone>(
func: impl Fn(A) -> <M as Kind_cdc7cd43dac7585f>::Of<'a, Result<O, E>> + 'a,
ta: <Self as Kind_cdc7cd43dac7585f>::Of<'a, A>,
) -> <M as Kind_cdc7cd43dac7585f>::Of<'a, (<Self as Kind_cdc7cd43dac7585f>::Of<'a, E>, <Self as Kind_cdc7cd43dac7585f>::Of<'a, O>)>where
<Self as Kind_cdc7cd43dac7585f>::Of<'a, Result<O, E>>: Clone,
<M as Kind_cdc7cd43dac7585f>::Of<'a, Result<O, E>>: Clone,
Partitions an option based on a function that returns a result in an applicative context.
This method partitions an option based on a function that returns a result in an applicative context.
§Type Signature
forall M A E O. Applicative M => (A -> M (Result O E), Option A) -> M (Option E, Option O)
§Type Parameters
'a: The lifetime of the values.M: The applicative context.A: The type of the elements in the input structure.E: The type of the error values.O: The type of the success values.
§Parameters
func: The function to apply to each element, returning aResultin an applicative context.ta: The option to partition.
§Returns
The partitioned option wrapped in the applicative context.
§Examples
use fp_library::{
brands::*,
functions::*,
};
let x = Some(5);
let y =
wilt::<OptionBrand, OptionBrand, _, _, _>(|a| Some(if a > 2 { Ok(a) } else { Err(a) }), x);
assert_eq!(y, Some((None, Some(5))));Source§fn wither<'a, M: Applicative, A: 'a + Clone, B: 'a + Clone>(
func: impl Fn(A) -> <M as Kind_cdc7cd43dac7585f>::Of<'a, Option<B>> + 'a,
ta: <Self as Kind_cdc7cd43dac7585f>::Of<'a, A>,
) -> <M as Kind_cdc7cd43dac7585f>::Of<'a, <Self as Kind_cdc7cd43dac7585f>::Of<'a, B>>where
<Self as Kind_cdc7cd43dac7585f>::Of<'a, Option<B>>: Clone,
<M as Kind_cdc7cd43dac7585f>::Of<'a, Option<B>>: Clone,
fn wither<'a, M: Applicative, A: 'a + Clone, B: 'a + Clone>(
func: impl Fn(A) -> <M as Kind_cdc7cd43dac7585f>::Of<'a, Option<B>> + 'a,
ta: <Self as Kind_cdc7cd43dac7585f>::Of<'a, A>,
) -> <M as Kind_cdc7cd43dac7585f>::Of<'a, <Self as Kind_cdc7cd43dac7585f>::Of<'a, B>>where
<Self as Kind_cdc7cd43dac7585f>::Of<'a, Option<B>>: Clone,
<M as Kind_cdc7cd43dac7585f>::Of<'a, Option<B>>: Clone,
Maps a function over an option and filters out None results in an applicative context.
This method maps a function over an option and filters out None results in an applicative context.
§Type Signature
forall M A B. Applicative M => (A -> M (Option B), Option A) -> M (Option B)
§Type Parameters
'a: The lifetime of the values.M: The applicative context.A: The type of the elements in the input structure.B: The type of the result of applying the function.
§Parameters
func: The function to apply to each element, returning anOptionin an applicative context.ta: The option to filter and map.
§Returns
The filtered and mapped option wrapped in the applicative context.
§Examples
use fp_library::{
brands::*,
functions::*,
};
let x = Some(5);
let y = wither::<OptionBrand, OptionBrand, _, _>(
|a| Some(if a > 2 { Some(a * 2) } else { None }),
x,
);
assert_eq!(y, Some(Some(10)));impl Copy for OptionBrand
impl Eq for OptionBrand
impl StructuralPartialEq for OptionBrand
Auto Trait Implementations§
impl Freeze for OptionBrand
impl RefUnwindSafe for OptionBrand
impl Send for OptionBrand
impl Sync for OptionBrand
impl Unpin for OptionBrand
impl UnsafeUnpin for OptionBrand
impl UnwindSafe for OptionBrand
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