a monadic action, annotated with a progress message that could be printed out
while running the action, and a message that could be printed out on error.
Actually printing out these messages is optional to allow non-IO monads to
just run the action.