fp_library/types/
rc_fn.rs

1use 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}