extern crate kinder; use kinder::lift::Monad; fn add_option(x: &Option<i32>, y: i32) -> Option<i32> { x.bind(|elem| Some(elem+y)) } fn add_options(x: &Option<i32>, y: &Option<i32>) -> Option<i32> { x.bind(|elem| add_option(y, *elem)) } fn main() { println!("{:?}", add_option(&Some(1), 1)); println!("{:?}", add_options(&Some(1), &Some(2))); }