Monadification, Memoization and Dynamic Programming by Simon Wimmer, Shuwei Hu and Tobias Nipkow May 22