Rust 还不支持higher-kinded types

最近又尝试了Rust,发现变化了好多。以前比较像走scala的路线,现在似乎定了方向,作为system language所以砍掉了很多东西。

看到trait就想到了haskell的type class,所以试了试看能不能实现一个monad。不过不幸的是,马上发现它的generic不支持高阶参数。

不过,Rust似乎并不反对加入higher-kinded types,而且因为是向后兼容的,所以即使是1.0之后也可以考虑加入。

这个是我期望可能的版本。

trait Monad<M<_>>{

fn bind<A, B, F : Fn(A) -> M<B>>(Self as M<A>, F) -> M<B>;

fn ret<A>(A) -> Self as M<A>;

}

posted @ 2015-03-04 13:40  wehu  阅读(325)  评论(0编辑  收藏  举报