Полагаю, у вас есть следующие определения:
class Foo is (Equatable[Foo box] & Stringable)
var value: I32 = 1
new create(value': I32) => value = value'
fun box eq(other: Foo box): Bool => value == other.value
fun string(): String iso^ => value.string()
primitive Bar
Затем вы можете связать имена для целых значений определенного типа, например:
actor Main
fun f(x: (Foo | Bar)): String =>
match x
| Foo(1) => "one"
| Foo(2) => "two"
| let x': Foo => x'.string()
else
"Bar"
end
Я думаю, что это не так уж и плохо в данном конкретном случае, но это, конечно, не настоящее связующее звено разрушения. Pony поддерживает такие шаблоны только для кортежей вида (let first: First, let second: Second)
.