Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- trait Monad<T> {
- fn ret(T) -> self;
- fn bind<U>(fn(&T) -> Monad<U>) -> Monad<U>;
- }
- impl<T> Option<T>: Monad<T> {
- fn ret(value: T) -> Option<T> { Some(value) }
- fn bind<U>(cb: fn(&T) -> Option<U>) -> Option<U> {
- match self {
- Some(value) => cb(&value),
- None => None
- }
- }
- }
- /*
- monad.rs:8:1: 13:2 error: method `bind` has an incompatible type: expected trait Monad but found enum core::option::Option
- monad.rs:8 fn bind<U>(cb: fn(&T) -> Option<U>) -> Option<U> {
- monad.rs:9 match self {
- monad.rs:10 Some(value) => cb(&value),
- monad.rs:11 None => None
- monad.rs:12 }
- monad.rs:13 }
- */
Add Comment
Please, Sign In to add comment