Function

Trait Function 

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

    // Required method
    fn new<'a, A, B>(f: impl 'a + Fn(A) -> B) -> ApplyFunction<'a, Self, 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 Output<'a, A, B>: Deref<Target = dyn Fn(A) -> B + 'a>

Required Methods§

Source

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

Creates a new function wrapper.

§Type Signature

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

§Parameters
  • f: The closure to wrap.
§Returns

The wrapped function.

§Examples
use fp_library::classes::function::Function;
use fp_library::brands::RcFnBrand;

let f = <RcFnBrand as Function>::new(|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 Output<'a, A, B> = <ArcFnBrand as Kind1L2T>::Output<'a, A, B>

Source§

impl Function for RcFnBrand

Source§

type Output<'a, A, B> = <RcFnBrand as Kind1L2T>::Output<'a, A, B>