Skip to content

Instantly share code, notes, and snippets.

@AlexBaitov
Last active February 25, 2019 10:00
Show Gist options
  • Select an option

  • Save AlexBaitov/ffde77e94afbfb100d17bddd4f86f1cb to your computer and use it in GitHub Desktop.

Select an option

Save AlexBaitov/ffde77e94afbfb100d17bddd4f86f1cb to your computer and use it in GitHub Desktop.
Sealed trait with inherited sealed trait exhaustive check
sealed trait A
sealed trait B extends A
case class Qa(value: String) extends A
case class Wb(value: String) extends B
case class Eb(value: String) extends B
def matc(ob: A) = ob match {
case Qa(v) => "q" + v
case Wb(v) => "w" + v
case Eb(v) => "e" + v
}
matc(Qa("Qa"))
matc(Wb("Wb"))
matc(Eb("Eb"))
/*
defined trait A
defined trait B
defined class Qa
defined class Wb
defined class Eb
matc: (ob: A)String
res0: String = qQa
res1: String = wWb
res2: String = eEb
*/
sealed trait A
sealed trait B extends A
case class Qa(value: String) extends A
case class Wb(value: String) extends B
case class Eb(value: String) extends B
def matc(ob: A) = ob match {
case Qa(v) => "q" + v
case Wb(v) => "w" + v
// case Eb(v) => "e" + v
}
matc(Qa("Qa"))
matc(Wb("Wb"))
//matc(Eb("Eb"))
/*
Warning:(7, 27) match may not be exhaustive.
It would fail on the following input: Eb(_)
def matc(ob: A) = ob match {
*/
/*
defined trait A
defined trait B
defined class Qa
defined class Wb
defined class Eb
matc: (ob: A)String
res0: String = qQa
res1: String = wWb
*/
sealed trait A
trait B extends A
case class Qa(value: String) extends A
case class Wb(value: String) extends B
case class Eb(value: String) extends B
def matc(ob: A) = ob match {
case Qa(v) => "q" + v
case Wb(v) => "w" + v
case Eb(v) => "e" + v
}
matc(Qa("Qa"))
matc(Wb("Wb"))
matc(Eb("Eb"))
/*
Warning:(7, 27) match may not be exhaustive.
It would fail on the following input: (_ : B)
def matc(ob: A) = ob match {
*/
/*
defined trait A
defined trait B
defined class Qa
defined class Wb
defined class Eb
matc: (ob: A)String
res0: String = qQa
res1: String = wWb
res2: String = eEb
*/
trait A
sealed trait B extends A
case class Qa(value: String) extends A
case class Wb(value: String) extends B
case class Eb(value: String) extends B
def matc(ob: A) = ob match {
// case Qa(v) => "q" + v
// case Wb(v) => "w" + v
case Eb(v) => "e" + v
}
//matc(Qa("Qa"))
//matc(Wb("Wb"))
matc(Eb("Eb"))
/*
defined trait A
defined trait B
defined class Qa
defined class Wb
defined class Eb
matc: (ob: A)String
res0: String = eEb
*/
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment