另一种铁锈仿制药运动

MFl*_*mer 7 rust

我正试图在Rust中实现像Monad一样的特性.主要是为了娱乐和熟悉类型系统.我很确定我不能完全实现Monad特性,因为缺乏"更高种类",正如在这个reddit讨论中所解释的那样,但我想知道我能接近多少.出于某种原因,我无法编译这段代码.似乎应该这样.有人可以解释原因吗?谢谢.

trait Monad<T> {
    fn lift(val: T) -> Self;
}

struct Context<T>{ 
    val: T 
}

impl<T> Monad<T> for Context<T> {
    fn lift(x: T) -> Context<T> {
        Context{val: x}
    }
}

fn main() { 
    let c:Context<int> = Context<int>::lift(5i);
}
Run Code Online (Sandbox Code Playgroud)

Luq*_*man 7

必须通过它调用特征中定义的静态方法.所以,你有:

let c: Context<int> = Monad::lift(5);
Run Code Online (Sandbox Code Playgroud)