2个版本
0.1.1 | 2020年9月1日 |
---|---|
0.1.0 | 2020年9月1日 |
#14 in #prototyping
4KB
提供用于原型设计命令行界面的高级 IO
函数 interact
。
一个针对 Haskell 开发者的小型教程包,改编自这篇可爱的 教程。
Interact 接受一个类型为 Fn(String) -> String
的函数,在 stdin
上运行它,并将结果打印到 stdout
。
示例
cat
use interakt::interact;
use std::convert::identity;
fn main() -> std::io::Result<()> { interact(identity) }
$ cat cat.rs | cargo run --bin cat
use interakt::interact;
use std::convert::identity;
fn main() -> std::io::Result<()> { interact(identity) }
wc
fn main() -> std::io::Result<()> {
let count = |s: String| -> String { format!("{}\n", s.len()) };
interact(count)
}
$ cat cat.rs | cargo run --bin wc
109
wc-l
fn main() -> std::io::Result<()> {
let count_lines = |s: String| -> String {
format!("{}\n", s.lines().collect::<Vec<_>>().len())
};
interact(count_lines)
}
$ cat cat.rs | cargo run --bin wcl
4
rev
fn main() -> std::io::Result<()> {
let rev_lines = |s: String| -> String {
s.lines()
.map(|line| line.chars().rev().collect())
.collect::<Vec<String>>()
.join("\n")
};
interact(rev_lines)
}
$ cat cat.rs | cargo run --bin rev
;tcaretni::tkaretni esu
;ytitnedi::trevnoc::dts esu
} )ytitnedi(tcaretni { >)(<tluseR::oi::dts >- )(niam nf