Trait higher::functor::Functor

source ·
pub trait Functor<'a, A: 'a> {
    type Target<T: 'a>: Functor<'a, T, Target<A> = Self>;

    fn fmap<B: 'a, F>(self, f: F) -> Self::Target<B>
    where
        F: Fn(A) -> B + 'a
; fn fconst<B>(self, b: B) -> Self::Target<B>
    where
        Self: Sized,
        B: Clone
, { ... } fn void(self) -> Self::Target<()>
    where
        Self: Sized
, { ... } fn f_into_iter(self) -> Box<dyn Iterator<Item = A>>
    where
        Self: Sized,
        A: 'static
, { ... } }
Expand description

A Functor lets you change the type parameter of a generic type.

A Functor defines a method fmap on a type F<_>: Functor which converts an F<A> to F<B> using a function Fn(A) -> B applied to the As inside it.

You can also use this just to modify the values inside your container value without changing their type, if the mapping function returns a value of the same type. This is called an “endofunctor.” In an ideal Rust, we would be able to implement this as a special case of fmap modifying the data in place, but in the Rust we have, beware that using fmap in this manner is considerably less efficient than using a mutable reference iterator.

Required Associated Types§

Required Methods§

Map a functor of A to a functor of B using a function from A to B.

Provided Methods§

Map the functor to the provided constant value.

Map the functor to the unit value ().

Turn the functor into an iterator.

let my_functor = vec![1, 2, 3];
let iter = my_functor.f_into_iter();
let my_vec: Vec<i32> = iter.collect();
assert_eq!(my_vec, vec![1, 2, 3]);

Implementations on Foreign Types§

Implementors§