Skip to content

Instantly share code, notes, and snippets.

@vigneshwaranr
Last active May 29, 2020 07:33
Show Gist options
  • Save vigneshwaranr/db8eefd46f886482851719346aead6ce to your computer and use it in GitHub Desktop.
Save vigneshwaranr/db8eefd46f886482851719346aead6ce to your computer and use it in GitHub Desktop.
9e8a12f2112b / MaybeDivideable2
sealed trait MaybeDivideable {
def get: Int
def flatMap(f: Int => MaybeDivideable): MaybeDivideable
/* New map method */
def map(f: Int => Int): MaybeDivideable
}
case class Divideable(value: Int) extends MaybeDivideable {
require(value != 0, "value must not be 0")
override def get: Int = value
override def flatMap(f: Int => MaybeDivideable): MaybeDivideable = f(get)
/* New map method */
override def map(f: Int => Int): MaybeDivideable = MaybeDivideable(f(get))
}
case object UnDivideable extends MaybeDivideable {
override def get: Int = throw new NoSuchFieldException
override def flatMap(f: Int => MaybeDivideable): MaybeDivideable = UnDivideable
/* New map method */
override def map(f: Int => Int): MaybeDivideable = UnDivideable
}
object MaybeDivideable {
def apply(value: Int): MaybeDivideable =
if (value == 0) UnDivideable else Divideable(value)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment