Instead, we do away with the visitor code and create an Algebraic Data Type.
sealed trait OneOrNone[+A] final case object None extends OneOrNone[Nothing] final case class One[+A](a: A) extends OneOrNone[A]
Then we pattern match when destructuring:
def stringOne[X](o: OneOrNone[X]) = o match { case One(o) => "get it! " + o case None => "don't got one" }
Much tidier!