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.size() == 0) { break } \ LazyStream.new() .append("Hello \"") .append(name) .append("\", if that's your real name.\n") .writeTo(SimpleOutput.stderr()) } } }