Wizards

A Wizard a is a conversation with the user that will result in a data type a, or may fail.
A Wizard is made up of one or more "primitives" (see below), composed using the Applicative,
Monad and Alternative instances. The Alternative instance is, as you might expect, a maybe-style cascade.
If the first wizard fails, the next one is tried.

The Wizard constructor is exported here for use when developing backends, but it is better for end-users to
simply pretend that Wizard is an opaque data type. Don't depend on this unless you have no other choice.

Wizards are, internally, just a maybe transformer over a prompt monad for each primitive action.

Read one line of input, with some default text already present, before and/or after the editing cursor.
Backends are not required to display this default text, or position the cursor anywhere, it is merely
a suggestion.

Modifiers

Retry produces a wizard that will retry the entire conversation again if it fails.
Conceptually, it could thought of as retry x = x <|> retry x, however it also prints
a user-friendly error message in the event of failure.