Recent versions of GHC 8.0 provides a Monoid instance for IO and this post gives a motivating example for why this instance is useful by building combinable "wizard"s. Wizards I'll define a "wizard" as a program that prompts a user "up front" for multiple inputs and then performs several actions after all input has been collected. Here is an example of a simple wizard: main :: IO () main = do -- F