Purifying Code with Algebra

In this talk, we look at an approach to abstracting IO out of Haskell functions by representing side effects as generalized algebraic data types, and implementing a side-effecting top-level interpreter for them.