Implement a minimal `Option` that has `map` and `flatMap`.
```scala
import scala.{Option => _}
// implement here
sealed trait Option[+A] {
def map[B](f: A => B): Option[B] = {
fold(None) { a =>
Some(f(a))
}
// this match {
// case Some(a) => Some(f(a))
// case None => None
// }
}
def flatMap[B](f: A => Option[B]): Option[B] = {
this.fold[Option[B]](None)(f)
// this match {
// case Some(a) => f(a)
// case None => None
// }
}
def fold[B](z: => B)(f: A => B): B = {
this match {
case Some(a) =>f(a)
case None => z
}
}
Some(1).fold(launchRocket)(identity)
}
case class Some[A](a: A) extends Option[A]
case object None extends Option[Nothing]
```