Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- sealed trait MaybeNumeric[A]
- case class YesNumeric[A](n: Numeric[A]) extends MaybeNumeric[A]
- case class NoNumeric[A]() extends MaybeNumeric[A]
- object MaybeNumeric {
- implicit def instance[A](implicit ev: Numeric[A]): MaybeNumeric[A] =
- YesNumeric(ev)
- }
- def add[A](a: A, b: A)(implicit ev: MaybeNumeric[A] = NoNumeric[A]()): Option[A] =
- ev match {
- case NoNumeric() => None
- case YesNumeric(ev) => Some(ev.plus(a, b))
- }
- scala> add(1.0, 2.0)
- res3: Option[Double] = Some(3.0)
- scala> add(3,4)
- res4: Option[Int] = Some(7)
- scala> add("five", "six")
- res5: Option[String] = None
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement