Add free monad write-up