package fj.demo; import fj.F; import fj.data.IOFunctions; import fj.data.LazyString; import static fj.F1W.lift; import static fj.data.IOFunctions.interact; import static fj.data.IOFunctions.runSafe; import static fj.data.LazyString.lines_; import static fj.data.LazyString.unlines_; import static java.lang.System.out; /** * Created by MarkPerry on 13/06/2015. */ public class IODemo { public static void main(String[] args) { IODemo d = new IODemo(); // d.readFirstShortLine(); // d.readFirstLine(); // d.simpleInteract(); d.getContents(); } /** * Reads from standard input until the line length is less than three * and prints that last line. */ public final void readFirstShortLine() { F<LazyString, LazyString> f = lift(lines_()).andThen(l -> l.filter(s -> s.length() < 3)).andThen(unlines_()); runSafe(interact(f)); } /** * Read a stream of input lazily using interact, in effect reading the first line */ public final void readFirstLine() { F<LazyString, LazyString> f = lift(LazyString::lines).andThen(unlines_()); runSafe(interact(f)); } /** * Demonstrate use of interact, just echoing the lazy string. Reading lines is done * lazily, so just the first line is read. */ public final void simpleInteract() { runSafe(interact(s -> s)); } /** * Demonstrate that getContents returns a lazy string. */ public final void getContents() { out.println(runSafe(IOFunctions.getContents())); } }