[Haskell-cafe] Non-termination using Free Monads and Data Types a la Carte