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