Scala Self-Study: What are free monads, and how do I use them for I/O?