Type::Tiny::Role(3) User Contributed Perl Documentation Type::Tiny::Role(3)

# [NAME](#NAME)

Type::Tiny::Role - type constraints based on the "DOES" method

# [SYNOPSIS](#SYNOPSIS)

Using via Types::Standard:

```
  package Local::Horse {
    use Moo;
    use Types::Standard qw( Str ConsumerOf );
    
    has name => (
      is       => 'ro',
      isa      => Str,
    );
    
    has owner => (
      is       => 'ro',
      isa      => ConsumerOf[ 'Local::Traits::DoesOwnership' ],
      default  => sub { Local::Person->new },
    );
  }
```

Using Type::Tiny::Class's export feature:

```
  package Local::Horse {
    use Moo;
    use Types::Standard qw( Str );
    use Type::Tiny::Role (
      Owner => { role => 'Local::Traits::DoesOwnership' },
    );
    
    has name => (
      is       => 'ro',
      isa      => Str,
    );
    
    has owner => (
      is       => 'ro',
      isa      => Owner,
      default  => sub { Local::Person->new },
    );
  }
```

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

```
  package Local::Horse {
    use Moo;
    use Types::Standard qw( Str );
    use Type::Tiny::Class;
    
    my $Owner = Type::Tiny::Role->new(
      role => 'Local::Traits::DoesOwnership',
    );
    
    has name => (
      is       => 'ro',
      isa      => Str,
    );
    
    has owner => (
      is       => 'ro',
      isa      => $Owner,
      default  => sub { Local::Person->new },
    );
  }
```

Using Type::Utils's functional interface:

```
  package Local::Horse {
    use Moo;
    use Types::Standard qw( Str );
    use Type::Utils;
    
    my $Owner = role_type 'Local::Traits::DoesOwnership';
    
    has name => (
      is       => 'ro',
      isa      => Str,
    );
    
    has owner => (
      is       => 'ro',
      isa      => $Owner,
      default  => sub { Local::Person->new },
    );
  }
```

# [STATUS](#STATUS)

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

# [DESCRIPTION](#DESCRIPTION)

Type constraints of the general form "{ $\_-&gt;DOES("Some::Role") }".

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

## [Attributes](#Attributes)

"role"

The role for the constraint.

Note that this package doesn't subscribe to any particular flavour of roles (Moose::Role, Mouse::Role, Moo::Role, Role::Tiny, etc). It simply trusts the object's "DOES" method (see UNIVERSAL).

"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"

Parent is always **Types::Standard::Object**, and cannot be passed to the constructor.

## [Methods](#Methods)

[stringifies\_to($constraint)](#stringifies_to%28$constraint%29)

See Type::Tiny::ConstrainedObject.

[numifies\_to($constraint)](#numifies_to%28$constraint%29)

See Type::Tiny::ConstrainedObject.

"with\_attribute\_values($attr1 =&gt; $constraint1, ...)"

See Type::Tiny::ConstrainedObject.

## [Exports](#Exports)

Type::Tiny::Role can be used as an exporter.

```
  use Type::Tiny::Role 'MyApp::Printable';
```

This will export the following functions into your namespace:

"MyAppPrintable"

[is\_MyAppPrintable( $value )](#is_MyAppPrintable%28)

[assert\_MyAppPrintable( $value )](#assert_MyAppPrintable%28)

[to\_MyAppPrintable( $value )](#to_MyAppPrintable%28)

Multiple types can be exported at once:

```
  use Type::Tiny::Role qw( MyApp::Printable MyApp::Sendable );
```

# [BUGS](#BUGS)

Please report any bugs to &lt;https://github.com/tobyink/p5-type-tiny/issues&gt;.

# [SEE ALSO](#SEE_ALSO)

Type::Tiny::Manual.

Type::Tiny.

Moose::Meta::TypeConstraint::Role.

# [AUTHOR](#AUTHOR)

Toby Inkster &lt;tobyink@cpan.org&gt;.

# [COPYRIGHT AND LICENCE](#COPYRIGHT_AND_LICENCE)

This software is copyright (c) 2013-2014, 2017-2025 by Toby Inkster.

This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.

# [DISCLAIMER OF WARRANTIES](#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.

2026-10-25 perl v5.44.0

---

Document: Type::Tiny::Role(3pm) from perl-type-tiny 2.010001-r4 (Chainguard OS)
Source: https://github.com/tobyink/p5-type-tiny
