Function

Trait Function 

Source
pub trait Function: Category {
    type Of<'a, A, B>: Deref<Target = dyn Fn(A) -> B + 'a>;

    // Required method
    fn new<'a, A, B>(
        f: impl 'a + Fn(A) -> B,
    ) -> <Self as Function>::Of<'a, A, B>;
}
Expand description

Abstraction for wrappers over closures.

This trait is implemented by “Brand” types (like ArcFnBrand and RcFnBrand) to provide a way to construct and type-check wrappers over closures (Arc<dyn Fn...>, Rc<dyn Fn...>, etc.) in a generic context, allowing library users to choose between implementations at function call sites.

The lifetime 'a ensures the function doesn’t outlive referenced data, while generic types A and B represent the input and output types, respectively.

Required Associated Types§

Source

type Of<'a, A, B>: Deref<Target = dyn Fn(A) -> B + 'a>

Required Methods§

Source

fn new<'a, A, B>(f: impl 'a + Fn(A) -> B) -> <Self as Function>::Of<'a, A, B>

Creates a new function wrapper.

This function wraps the provided closure f into a function wrapper.

§Type Signature

forall a b. Function f => (a -> b) -> f a b

§Type Parameters
  • A: The input type of the function.
  • B: The output type of the function.
§Parameters
  • f: The closure to wrap.
§Returns

The wrapped function.

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

let f = fn_new::<RcFnBrand, _, _>(|x: i32| x * 2);
assert_eq!(f(5), 10);

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.

Implementors§

Source§

impl Function for ArcFnBrand

Source§

type Of<'a, A, B> = <ArcFnBrand as Kind_140eb1e35dc7afb3>::Of<'a, A, B>

Source§

impl Function for RcFnBrand

Source§

type Of<'a, A, B> = <RcFnBrand as Kind_140eb1e35dc7afb3>::Of<'a, A, B>