concrete HelloDemo { @type run () -> () } define HelloDemo { run () { scoped { TextReader reader <- TextReader$fromBlockReader(SimpleInput$stdin()) } cleanup { \ LazyStream$new() .append("Goodbye.\n") .writeTo(SimpleOutput$stderr()) } in while (!reader.pastEnd()) { \ LazyStream$new() .append("What is your name? ") .writeTo(SimpleOutput$stderr()) String name <- reader.readNextLine() if (name.readSize() == 0) { break } \ LazyStream$new() .append("Hello \"") .append(name) .append("\", if that's your real name.\n") .writeTo(SimpleOutput$stderr()) } } }