anchor.diff:  // Using Scala's self recursive tail call optimization
   @tailrec
   def run(evenOdd: EvenOdd): Boolean = evenOdd match {
  -case Done(result) => result
  -case Even(value) => run(even(value))
  -case Odd(value) => run(odd(value))
  +  case Done(result) => result
  +  case Even(value) => run(even(value))
  +  case Odd(value) => run(odd(value))
   }
   ----
   
  
positive.code: [source, scala]
  ----
  import scala.util.control.TailCalls.{ TailRec, done, tailcall }
  def even(i: Int): TailRec[Boolean] = i match {
  case 0 => done(true)
  case _ => tailcall(odd(i - 1))
  }
  def odd(i: Int): TailRec[Boolean] = i match {
  case 0 => done(false)
  case _ => tailcall(even(i - 1))
  }
  even(3000).result
  ----
  
  
negative.code: [source, scala]
  ----
  def even(i: Int): Boolean = i match {
    case 0 => true
    case _ => odd(i - 1)
  }
  
  def odd(i: Int): Boolean = i match {
    case 0 => false
    case _ => even(i - 1)
  }
  ----
  
  