diff options
author | Martin Odersky <odersky@gmail.com> | 2017-01-05 16:02:09 +0700 |
---|---|---|
committer | Martin Odersky <odersky@gmail.com> | 2017-01-05 18:00:06 +0700 |
commit | aa6ebe938639f07dd6f5612e645f1449f37a86eb (patch) | |
tree | 24d257c1f12d0f5cb9b76102043046e3a904d98a /tests/pos | |
parent | 42eb864dc752254fc3b8b0428570fe94aa1dafc7 (diff) | |
download | dotty-aa6ebe938639f07dd6f5612e645f1449f37a86eb.tar.gz dotty-aa6ebe938639f07dd6f5612e645f1449f37a86eb.tar.bz2 dotty-aa6ebe938639f07dd6f5612e645f1449f37a86eb.zip |
Implement structural type member access
New scheme for implementing structural type member access.
Diffstat (limited to 'tests/pos')
-rw-r--r-- | tests/pos/zoo2.scala | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/tests/pos/zoo2.scala b/tests/pos/zoo2.scala new file mode 100644 index 000000000..9911416d3 --- /dev/null +++ b/tests/pos/zoo2.scala @@ -0,0 +1,44 @@ +object Test { +type Meat = { + type IsMeat = Any +} +type Grass = { + type IsGrass = Any +} +type Animal = { + type Food + def eats(food: Food): Unit + def gets: Food +} +type Cow = { + type IsMeat = Any + type Food <: Grass + def eats(food: Grass): Unit + def gets: Grass +} +type Lion = { + type Food = Meat + def eats(food: Meat): Unit + def gets: Meat +} +def newMeat: Meat = new { + type IsMeat = Any +} +def newGrass: Grass = new { + type IsGrass = Any +} +def newCow: Cow = new { + type IsMeat = Any + type Food = Grass + def eats(food: Grass) = () + def gets = newGrass +} +def newLion: Lion = new { + type Food = Meat + def eats(food: Meat) = () + def gets = newMeat +} +val milka = newCow +val leo = newLion +leo.eats(milka) +} |