logo
Free, unlimited AI code reviews that run on commit
git-lrc git-lrc GitHub Install Now We'd appreciate a star git-lrc - Free, unlimited AI code reviews that run on commit | Product Hunt git-lrc - Free, unlimited AI code reviews that run on commit | Product Hunt

Type::Tiny::Union - union type constraints

Author

       Toby Inkster <tobyink@cpan.org>.

Bugs

       Please report any bugs to <https://github.com/tobyink/p5-type-tiny/issues>.

Description

       Union type constraints.

       This package inherits from Type::Tiny; see that for most documentation.  Major differences are listed
       below:

   Constructor
       The "new" constructor from Type::Tiny still works, of course. But there is also:

       new_by_overload(%attributes)
           Like  the  "new" constructor, but will sometimes return another type constraint which is not strictly
           an instance of Type::Tiny::Union, but still encapsulates the same meaning. This constructor  is  used
           by Type::Tiny's overloading of the "|" operator.

   Attributes
       "type_constraints"
           Arrayref of type constraints.

           When  passed  to  the constructor, if any of the type constraints in the union is itself a union type
           constraint, this is "exploded" into the new union.

       "constraint"
           Unlike Type::Tiny, you cannot pass a constraint coderef to the  constructor.   Instead  rely  on  the
           default.

       "inlined"
           Unlike  Type::Tiny,  you  cannot  pass  an  inlining coderef to the constructor.  Instead rely on the
           default.

       "parent"
           Unlike Type::Tiny, you cannot pass an inlining coderef to the constructor.  A parent will instead  be
           automatically calculated.

       "coercion"
           You  probably  do not pass this to the constructor. (It's not currently disallowed, as there may be a
           use for it that I haven't thought of.)

           The auto-generated default will be a Type::Coercion::Union object.

   Methods
       find_type_for($value)
           Returns the first individual type constraint in the union which $value passes.

       stringifies_to($constraint)
           See Type::Tiny::ConstrainedObject.

       numifies_to($constraint)
           See Type::Tiny::ConstrainedObject.

       "with_attribute_values($attr1 => $constraint1, ...)"
           See Type::Tiny::ConstrainedObject.

   Overloading
       •   Arrayrefification calls "type_constraints".

Disclaimer Of Warranties

       THIS  PACKAGE  IS  PROVIDED  "AS  IS"  AND  WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, WITHOUT
       LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.

perl v5.40.1                                       2025-05-06                             Type::Tiny::Union(3pm)

Name

       Type::Tiny::Union - union type constraints

See Also

       Type::Tiny::Manual.

       Type::Tiny.

Status

       This module is covered by the Type-Tiny stability policy.

Synopsis

       Using via the "|" operator overload:

         package Local::Stash {
           use Moo;
           use Types::Common qw( ArrayRef HashRef );

           has data => (
             is   => 'ro',
             isa  => HashRef | ArrayRef,
           );
         }

         my $x = Local::Stash->new( data => {} );  # ok
         my $y = Local::Stash->new( data => [] );  # ok

       Using Type::Tiny::Union's object-oriented interface:

         package Local::Stash {
           use Moo;
           use Types::Common qw( ArrayRef HashRef );
           use Type::Tiny::Union;

           my $AnyData = Type::Tiny::Union->new(
             name             => 'AnyData',
             type_constraints => [ HashRef, ArrayRef ],
           );

           has data => (
             is   => 'ro',
             isa  => $AnyData,
           );
         }

       Using Type::Utils's functional interface:

         package Local::Stash {
           use Moo;
           use Types::Common qw( ArrayRef HashRef );
           use Type::Utils;

           my $AnyData = union AnyData => [ HashRef, ArrayRef ];

           has data => (
             is   => 'ro',
             isa  => $AnyData,
           );
         }

return

See Also