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

NAME

List::Objects::Types - Type::Tiny-based types for List::Objects::WithUtils

SYNOPSIS

  package Foo;

  use List::Objects::Types -all;
  use List::Objects::WithUtils;
  use Moo;
  use MooX::late;

  has my_array => (
    is  => 'ro',
    isa => ArrayObj,
    default => sub { array }
  );

  has static_array => (
    is  => 'ro',
    isa => ImmutableArray,
    coerce  => 1,
    default => sub { [qw/ foo bar /] }
  );

  has my_hash => (
    is  => 'ro',
    isa => HashObj,
    coerce  => 1,
    # Coercible from a plain HASH:
    default => sub { +{} }
  );

  use Types::Standard 'Int', 'Num';
  has my_ints => (
    is  => 'ro',
    # Nums added to this array_of(Int) are coerced to Ints:
    isa => TypedArray[ Int->plus_coercions(Num, 'int($_)') ],
    coerce  => 1,
    default => sub { [1, 2, 3.14] }
  );

DESCRIPTION

A small set of Type::Tiny-based types & coercions for List::Objects::WithUtils.

Also see MoopsX::ListObjects, which provides Moops class-building sugar with List::Objects::WithUtils integration.

ArrayObj

An object that consumes List::Objects::WithUtils::Role::Array.

Can be coerced from a plain ARRAY; a shallow copy is performed.

HashObj

An object that consumes List::Objects::WithUtils::Role::Hash.

Can be coerced from a plain HASH; a shallow copy is performed.

ImmutableArray

An object that consumes List::Objects::WithUtils::Role::Array::Immutable.

Can be coerced from a plain ARRAY or an "ArrayObj"; a shallow copy is performed.

TypedArray

An object that consumes List::Objects::WithUtils::Role::Array::Typed.

Not coercible.

TypedArray[`a]

TypedArray can be parameterized with another type constraint. For example, the type constraint TypedArray[Num] will accept array_of(Num, 1, 2, 3.14159), and will also accept array_of(Int, 1, 2, 3) because Int is a subtype of Num.

Can be coerced from a plain ARRAY or an "ArrayObj"; a shallow copy is performed. If the parameter also has a coercion, this will be applied to each item in the new array.

(The examples/ directory that comes with this distribution contains some examples of parameterized & coercible TypedArrays.)

ImmutableTypedArray

An object that isa List::Objects::WithUtils::Array::Immutable::Typed.

Not coercible.

ImmutableTypedArray[`a]

ImmutableTypedArray can be parameterized with another type constraint, like "TypedArray".

Can be coerced from a plain ARRAY or an "ArrayObj".

TypedHash

An object that consumes List::Objects::WithUtils::Role::Hash::Typed.

Not coercible.

TypedHash[`a]

TypedHash can be parameterized with another type constraint, like "TypedArray".

Can be coerced from a plain HASH or a "HashObj". If the parameter also has a coercion, this will be applied to each value in the new hash.

ImmutableTypedHash

An object that isa List::Objects::WithUtils::Hash::Immutable::Typed.

Not coercible.

ImmutableTypedHash[`a]

ImmutableTypedHash can be parameterized with another type constraint, like "TypedHash".

Can be coerced from a plain HASH or an "HashObj".

AUTHOR

Jon Portnoy <avenj@cobaltirc.org> with significant contributions from Toby Inkster (CPAN: TOBYINK)