blob: ed9b32043479cd8089da2441a30276558334d1b0 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
|
object Animal {
def main(args: Array[String]) { new Animal[Awake].goToSleep }
}
class Animal[A <: AwakeOrAsleep] {
def goToSleep[B >: A <: Awake]: Animal[Asleep] = new Animal[Asleep]
def wakeUp[B >: A <: Asleep]: Animal[Awake] = new Animal[Awake]
}
sealed trait AwakeOrAsleep
trait Awake extends AwakeOrAsleep
trait Asleep extends AwakeOrAsleep
|