diff options
Diffstat (limited to 'tests/pos/pets.scala')
-rw-r--r-- | tests/pos/pets.scala | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/tests/pos/pets.scala b/tests/pos/pets.scala new file mode 100644 index 000000000..e1d5df44e --- /dev/null +++ b/tests/pos/pets.scala @@ -0,0 +1,21 @@ +// Representing the current type +trait Pet { + type This <: Pet + def name: String + def renamed(newName: String): This +} + +case class Fish(name: String, age: Int) extends Pet { + type This = Fish + def renamed(newName: String): Fish = copy(name = newName) +} + +case class Kitty(name: String, age: Int) extends Pet { + type This = Kitty + def renamed(newName: String): Kitty = copy(name = newName) +} + +object Test { + def esquire[A <: Pet](a: A): a.This = a.renamed(a.name + ", Esq.") + val f: Fish = esquire(new Fish("bob", 22)) +} |