record Foo { x: SharedPointer[Bar]; y: SharedPointer[Bar]; } variant Bar = Int | Foo; main() { var y = Foo(allocateShared(Bar(0)), allocateShared(Bar(0))); }