Last active
February 25, 2019 10:00
-
-
Save AlexBaitov/ffde77e94afbfb100d17bddd4f86f1cb to your computer and use it in GitHub Desktop.
Sealed trait with inherited sealed trait exhaustive check
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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 | |
| */ |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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 | |
| */ |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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 | |
| */ |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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