2 个不稳定版本
使用旧的 Rust 2015
0.3.0 | 2016年6月23日 |
---|---|
0.2.0 | 2015年2月10日 |
1894 在 Rust 模式 中
每月 40 次下载
在 2 个crate 中使用
10KB
214 行
Rust mdo
演示
Rust mdo 是一种使用宏和鸭子类型的 Monadic do 语法。它提供了一种类似 Haskell do 语法的方法扩展,并使用 bind
函数进行重写。它还提供了一些常见 Monadic 结构的函数。
示例
将以下内容添加到您的 Cargo.toml
[dependencies]
mdo = "*"
#[macro_use] extern crate mdo;
fn main() {
// exporting the monadic functions for the Iterator monad (similar
// to list comprehension)
use mdo::iter::{bind, ret, mzero};
// getting the list of (x, y, z) such that
// - 1 <= x <= y < z < 11
// - x^2 + y^2 == z^2
let l = bind(1i32..11, move |z|
bind(1..z, move |x|
bind(x..z, move |y|
bind(if x * x + y * y == z * z { ret(()) }
else { mzero() },
move |_|
ret((x, y, z))
)))).collect::<Vec<_>>();
println!("{:?}", l);
// the same thing, using the mdo! macro
let l = mdo! {
z =<< 1i32..11;
x =<< 1..z;
y =<< x..z;
when x * x + y * y == z * z;
ret ret((x, y, z))
}.collect::<Vec<_>>();
println!("{:?}", l);
}
文档
您可以在 这里 找到 rustdoc 文档。
许可证
本作品是免费的。您可以在 Do What The Fuck You Want To Public License, Version 2 的条款下重新分发和/或修改它,由 Sam Hocevar 发布。有关更多详细信息,请参阅 COPYING 文件。