fp_library/types/
rc_fn.rs1use crate::{hkt::Kind1L2T, typeclasses::ClonableFn};
2use std::rc::Rc;
3
4pub struct RcFn;
5
6#[derive(Clone, Copy, Debug, Default, PartialEq, Eq, PartialOrd, Ord, Hash)]
7pub struct RcFnBrand;
8
9impl Kind1L2T for RcFnBrand {
10 type Output<'a, A, B> = Rc<dyn 'a + Fn(A) -> B>;
11}
12
13impl ClonableFn for RcFnBrand {
14 type Output<'a, A: 'a, B: 'a> = <Self as Kind1L2T>::Output<'a, A, B>;
15
16 fn new<'a, A: 'a, B: 'a>(f: impl 'a + Fn(A) -> B) -> <Self as ClonableFn>::Output<'a, A, B> {
17 Rc::new(f)
18 }
19}