#[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)
}