In short,
Q provides the
Quasi operations in one neat
monad for the user.
The longer story, is that
Q wraps an arbitrary
Quasi-able monad. The perceptive reader notices that
Quasi has only two instances,
Q itself and
IO,
neither of which have concrete implementations.
Q plays the
trick of
dependency inversion, providing an abstract interface
for the user which is later concretely fufilled by an concrete
Quasi instance, internal to GHC.