1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
use std::rc::Rc; use apply::Apply; use pure::Pure; pub trait Applicative: Apply + Pure {} macro_rules! applicative_numeric_impl { ($($t:ty)*) => ($( impl Applicative for $t {} )*) } applicative_numeric_impl! { usize u8 u16 u32 u64 u128 isize i8 i16 i32 i64 i128 f32 f64 } impl<A> Applicative for Rc<A> {} impl<A> Applicative for Box<A> {} impl<A> Applicative for Option<A> {} impl<A, E: Clone> Applicative for Result<A, E> {} impl<A> Applicative for Vec<A> {}