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>; } |