public static (bool running, ActionProgram <Unit> newProgram) Process( string command, Writer writer, ActionProgram <Unit> program) { if (command.Any()) { switch (command[0]) { case 'w': case 'W': return(true, Actions.bindInvoke(() => writer.Write(command.Substring(1)), program)); case 'u': case 'U': return(true, Actions.unbind(program)); case 'a': case 'A': return(false, Actions.abort); } } return(false, program); }
public static void Main(string[] args) { var value = "initial"; var program = Actions.abort; var writer = new Writer(s => value = s); var running = true; do { (running, program) = Process(Console.ReadLine(), writer, program); } while (running); Actions.interpret(program); Console.WriteLine(value); }