using Void = FreeAwait.Void;
var name = await new ConsoleIO().Run(Greet());
async IStep<string?> Greet()
await new WriteLine("What's your name, stranger?");
var name = await new ReadLine();
await new WriteLine($"Greetings, {name}!");
record ReadLine : IStep<ReadLine, string?>;
record WriteLine(string? Text) : IStep<WriteLine, Void>;
public string? Run(ReadLine command) => "Kostya";
public Void Run(WriteLine command)
Console.WriteLine(command.Text);