stop using scalaz: scala.util.Control.TailCalls provides trampoline