fun 0.0.1

A small prelude for functional programming in Rust
/// The empty type; no values exist or can be constructed;
#[derive(Clone)]
#[derive(Copy)]
#[derive(Eq)]
#[derive(Hash)]
#[derive(Ord)]
#[derive(PartialEq)]
#[derive(PartialOrd)]
#[derive(Rand)]
#[derive(Show)]
pub enum Maybe<A> {
    None,
    Some(A),
}

#[inline]
pub fn elim<A, R, F: Fn(A) -> R>(none: R, some: F, m: Maybe<A>) -> R {
    match m {
        Maybe::None => { none },
        Maybe::Some(a) => { some(a) },
    }
}

impl<A> Maybe<A> {
    #[inline]
    pub fn elim<A, R, F: Fn(A) -> R>(none: R, some: F, m: Maybe<A>) -> R {
        elim(none, some, m)
    }
}

#[inline]
pub fn to_maybe<A>(m: Option<A>) -> Maybe<A> {
    match m {
        Option::None => { Maybe::None },
        Option::Some(a) => { Maybe::Some(a) },
    }
}

#[inline]
pub fn to_option<A>(m: Maybe<A>) -> Option<A> {
    elim(Option::None,
         |&: a| { Option::Some(a) },
         m)
}