[−][src]Crate interakt
Provides the higher order IO
function interact
for prototyping command line interfaces.
A small tutorial package for Haskell refugees adapted from this lovely walkthrough.
Interact takes a function of type Fn(String) -> String
, runs it on stdin
and prints the result to stdout
.
Examples
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
Functions
interact | The higher-order |