Types::...rd::Dict(3)

🌸 NAME 🌸

Okay so bestie, the page we're on is Types::...rd::Dict(3) from the User Contributed Perl Documentation crowd, and it's all about Types::Standard::Dict β€” the exporter utility + utility functions for the Dict type constraint. Slay. πŸ’…

🚨 STATUS 🚨

This module is not covered by the Type-Tiny stability policy. No cap, that's the whole status.

πŸ¦‹ DESCRIPTION πŸ¦‹

This is mostly internal code, but it has one public-facing function. Main character energy for exactly one function, honestly iconic.

✨ Function ✨

  • Types::Standard::Dict::combine(@dicts) β€” creates a combined type constraint, and it's attempting to be permissive. Lowkey generous of it.

The following two types should be equivalent:

my $type1 = Types::Standard::Dict::combine(
  Dict[ name => Str ],
  Dict[ age => Int, Slurpy[HashRef[Int]] ],
  Dict[ id => Str, name => ArrayRef, Slurpy[ArrayRef] ],
);

my $type2 = Dict[
  name => Str|ArrayRef,
  age => Int,
  id => Str,
  Slurpy[ HashRef[Int] | ArrayRef ],
];

Note that a hashref satisfying the combined type wouldn't satisfy any of the individual Dict constraints, nor vice versa! Like, the overlap is doing its own thing. 😭

This function can be exported:

use Types::Standard -types;
use Types::Standard::Dict combine => { -as => 'combine_dicts' };

my $type1 = combine_dicts(
  Dict[ name => Str ],
  Dict[ age => Int, Slurpy[HashRef[Int]] ],
  Dict[ id => Str, name => ArrayRef, Slurpy[ArrayRef] ],
);

🫢 Exports 🫢

Types::Standard::Dict can be used experimentally as an exporter. Experimental, bestie β€” read it and weep (affectionately). πŸ™ˆ

use Types::Standard 'Str';
use Types::Standard::Dict Credentials => { of => [
  username => Str,
  password => Str,
] };

This will export the following functions into your namespace:

  • "Credentials"
  • is_Credentials( $value )
  • assert_Credentials( $value )
  • to_Credentials( $value )

Multiple types can be exported at once:

use Types::Standard -types;

use Types::Standard::Dict (
  Credentials => { of => [
    username => Str,
    password => Str,
  ] },
  Headers => { of => [
    'Content-Type' => Optional[Str],
    'Accept'       => Optional[Str],
    'User-Agent'   => Optional[Str],
  ] },
);

# Exporting this separately so it can use the types defined by
# the first export.
use Types::Standard::Dict (
  HttpRequestData => { of => [
    credentials => Credentials,
    headers     => Headers,
    url         => Str,
    method      => Enum[ qw( OPTIONS HEAD GET POST PUT DELETE PATCH ) ],
  ] },
);

assert_HttpRequestData( {
  credentials => { username => 'bob', password => 's3cr3t' },
  headers     => { 'Accept' => 'application/json' },
  url         => 'http://example.net/api/v1/stuff',
  method      => 'GET',
} );

It's possible to further constrain the hashref using "where":

use Types::Standard::Dict MyThing => { of => [ ... ], where => sub { ... } };

πŸ› BUGS πŸ›

Please report any bugs to <https://github.com/tobyink/p5-type-tiny/issues>. Do it for the plot. πŸ’–

πŸ‘€ SEE ALSO πŸ‘€

  • Types::Standard.

πŸ‘‘ AUTHOR πŸ‘‘

Toby Inkster <tobyink@cpan.org>. Iconic. ✨

This software is copyright (c) 2013-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 πŸ’€

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.

mwah πŸ’‹ this page came from perl v5.42.2, dated 2026-04-07, and the footer is serving Types::...rd::Dict(3) β€” bye bestie, go combine some dicts responsibly 🫢🌈

πŸ“¦ where this page comes from