Проблема в том, что вы ссылаетесь на сопутствующие объекты для ваших классов дел, а не на их конкретные экземпляры. В связи с этим REPL уже должен был предоставить вам предупреждения об устаревании.
Решение состоит в том, чтобы добавить несколько скобок:
sealed abstract trait Event
sealed abstract trait Status extends Event
sealed abstract trait UIEvent extends Event
case class Results() extends Event
case class Query() extends Event
case class Running() extends Status
case class Finished() extends Status
case class Update() extends UIEvent
и
val events = List(Results(), Query(), Running(), Finished(), Update())
events foreach {
case Results() => println("Got a Results")
case Running() => println("Got a Running")
case s:Status => println("Got some StatusEvent")
case ui:UIEvent => println("Got some UIEvent")
case e: Event => println("Generic Event")
case x => println("Didn't match at all " + x)
}
или, как предлагает Дидье, использовать case object
s
sealed abstract trait Event
sealed abstract trait Status extends Event
sealed abstract trait UIEvent extends Event
case object Results extends Event
case object Query extends Event
case object Running extends Status
case object Finished extends Status
case object Update extends UIEvent
и
val events = List(Results, Query, Running, Finished, Update)
events foreach {
case Results => println("Got a Results")
case Running => println("Got a Running")
case s:Status => println("Got some StatusEvent")
case ui:UIEvent => println("Got some UIEvent")
case e: Event => println("Generic Event")
case x => println("Didn't match at all " + x)
}