The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!perl -T

use strict;
use warnings;

use Test::More tests => 6;

use constant Str => 'MyTypes::Str';
use constant Int => 'MyTypes::Int';
use constant Num => 'MyTypes::Num';

sub MyTypes::Str::new { "str:$_[0]" }

sub MyTypes::Int::new { "int:$_[0]" }

{ package MyTypes::Num }

{
 use Lexical::Types as => sub { $_[0] =~ /(?:Str|Int)/ ? ($_[0], 'new') : () };

 my Str $x;
 is $x, "str:MyTypes::Str", 'my constant_type $x';

 my Int ($y, $z);
 is $y, "int:MyTypes::Int", 'my constant_type ($y,';
 is $z, "int:MyTypes::Int", 'my constant_type  $z)';

 my Num $t;
 is $t, undef, 'my constant_type_skipped $t';

 my MyTypes::Str $u;
 is $u, "str:MyTypes::Str", 'my MyTypes::Str $u';

 my MyTypes::Num $v;
 is $v, undef, 'my MyTypes::Num $v';
}