Blog::kobaken

prove t/foo/bar/baz.t

Data::Checks, Type::Tiny, Moose などの様々な型制約を一箇所に保存し、取り出せる kura をリリースしました。

metacpan.org

Perlには、Data::Checks, Type::Tiny, Mooseなど型制約を司るライブラリが複数あります。大型のプロジェクトだと、時代の変遷からか複数の型制約が混在することがあると思います。また、最近のPerlだと、class featureのCorinna プロジェクト に続いて、値のチェックを行う Oshun プロジェクト が進行しています。( Data::Checks は、このプロジェクトの試作品です。)こういったPerl本体の動きに乗りやすくするためにも、複数の型制約を統一的なインターフェースで扱えると良いのではないかと思いました。

そこで、今回、Data::Checks, Type::Tiny, Moose などの様々な型制約を一箇所に保存し、取り出せる kura をリリースしました。kura は蔵です。

Data::Checks -----------------> +--------+
                                |        |
Type::Tiny -------------------> |        |
                                |  Kura  | ---> Named Value Constraints!
Moose::Meta::TypeConstraint --> |        |
                                |        |
YourFavoriteConstraint -------> +--------+

以下のような感じで、使えます。use kuratypeと心の目で置き換えて読めば、静的型付け言語の型宣言と似た感じに読めるはずです!たぶん。

package MyFoo {
   use Types::Standard -types;
 
  use kura Name  => Str & sub { qr/^[A-Z][a-z]+$/ };
  use kura Level => Int & sub { $_[0] >= 1 && $_[0] <= 100 };
 
  use kura Charactor => Dict[
      name  => Name,
      level => Level,
  ];
}

package main;
use MyFoo qw(Charactor);

Charactor->check({ name => 'Alice', level => 50 });

よかったら使ってください!