fp_library/types/
arc_fn.rs1use crate::{hkt::Kind1L2T, typeclasses::ClonableFn};
2use std::sync::Arc;
3
4pub struct ArcFn;
5
6#[derive(Clone, Copy, Debug, Default, PartialEq, Eq, PartialOrd, Ord, Hash)]
7pub struct ArcFnBrand;
8
9impl Kind1L2T for ArcFnBrand {
10 type Output<'a, A, B> = Arc<dyn 'a + Fn(A) -> B>;
11}
12
13impl ClonableFn for ArcFnBrand {
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 Arc::new(f)
18 }
19}