Adapted from the paper "Backtracking, Interleaving, and Terminating Monad
Transformers" by Oleg Kiselyov, Chung-chieh Shan, Daniel P. Friedman, Amr
Sabry.
