Perl 在Type::Tiny自定义约束内运行强制?

Perl 在Type::Tiny自定义约束内运行强制?,perl,moo,Perl,Moo,我有一个自定义DateTime类型,该类型上定义了从字符串到DateTime的强制,如下所示: package Library; use Type::Library -base, -declare => qw(DateTime); use DateTime::Format::ISO8601; class_type DateTime, { class => 'DateTime' }; coerce DateTime, from Str, via { DateTime::Format

我有一个自定义DateTime类型,该类型上定义了从字符串到DateTime的强制,如下所示:

package Library;
use Type::Library -base, -declare => qw(DateTime);
use DateTime::Format::ISO8601;

class_type DateTime, { class => 'DateTime' };

coerce DateTime, from Str, via { DateTime::Format::ISO8601->parse_datetime($_) };
package MyObj;
use Moo;
$constraint = declare MyType, as Dict[ name => Str, date => DateTime ];

has 'whatsis' => ( is => 'ro', isa => $constraint );
我想在Dict中使用DateTime类型,如下所示:

package Library;
use Type::Library -base, -declare => qw(DateTime);
use DateTime::Format::ISO8601;

class_type DateTime, { class => 'DateTime' };

coerce DateTime, from Str, via { DateTime::Format::ISO8601->parse_datetime($_) };
package MyObj;
use Moo;
$constraint = declare MyType, as Dict[ name => Str, date => DateTime ];

has 'whatsis' => ( is => 'ro', isa => $constraint );
然后称之为:

use MyObj;
my $obj = MyObj->new( whatsis => { name => 'Something', date => '2016-01-01' } );
我曾尝试在
whatsis
的声明中添加
improve=>1
,但没有效果

如何创建从Dict继承并运行成员类型上定义的类型强制的自定义类型?

来自

下午六时

package Library;
use Type::Library -base, -declare => qw(Datetime);
use Type::Utils -all;
use Types::Standard -all;
use DateTime::Format::ISO8601;

class_type Datetime, { class => 'DateTime' };
coerce Datetime,
  from Str, via { DateTime::Format::ISO8601->parse_datetime($_) };

declare 'MyType', as Dict[ name => Str, date => Datetime ], coercion => 1;
MyObj.pm:

package MyObj;
use Moo;
use Library -all;

has 'whatsis' => ( is => 'ro', isa => MyType, coerce => 1 );
tester.pl:

#!perl
use MyObj;
my $obj = MyObj->new( whatsis => { name => 'Something', date => '2016-01-01' } );
use Data::Dumper; print Dumper $obj;