Yeah, obligatory reminder that "chaining" is just function composition. As in:
SecondQuery(FirstQuery(userInput));
"Advanced" chaining can be as simple as:
do {
partial = FirstQuery(input);
choice = DeciderQuery(partial);
input = choice ? Query2A(partial) : Query2B(partial);
} while(!ValidationQuery(input));
return input; // or print it or whatever
It only looks complex when you need to chain things at runtime through some interface, but that's the usual problem of having to reinvent basic blocks of your language as objects or data structures because your language doesn't let you treat code and data interchangeably. But if you're just experimenting with chains, using the most basic programming building blocks directly - functions, conditionals, loops - is by far the easiest.