Split free_monad! into separate module