package MyApp { use Zydeco; class Widget { has id; } } my $foo = MyApp::Widget->new( id => 1 ); my $bar = MyApp->new_widget( id => 2 ); # factory: one character fewer! #### package MyApp { use Zydeco; class Widget { has id; factory new_widget ( Int *id ) { state %objects; $objects{ $arg->id } //= $class->new( %$arg ); } } } my $foo = MyApp->new_widget( id => 42 ); my $bar = MyApp->new_widget( id => 42 ); die unless $foo == $bar;