#interact #higher-order #interface #io #command-line-interface #prototyping #haskell

interakt

提供用于原型设计命令行界面的高级 IO 函数 interact

2个版本

0.1.1 2020年9月1日
0.1.0 2020年9月1日

#14 in #prototyping

MIT/Apache

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

无运行时依赖