Implement a minimal `Option` that has `map` and `flatMap`. ```scala import scala.{Option => _} // implement here sealed trait Option[+T] { def map[N](f: T => N): Option[N] = { fold(None)(Some(f(_))) } def flatMap[N](f: T => Option[N]): Option[N] = { fold(None)(f) } def fold[N](ifEmpty: N)(f: T => N): N = { this match { case None => ifEmpty case Some(e) => f(e) } } } case class Some[T](v: T) extends Option[T] case object None extends Option[Nothing] def f(i: Int): Option[String] = ??? val r = Some(12).flatMap(i: Int => f(i)) ```