NAME
Types::Equal - type constraints for single value equality
SYNOPSIS
use Types::Equal qw( Eq Equ );
use Types::Standard -types;
use Type::Utils qw( match_on_type );
# Check single string equality
my $Foo = Eq['foo'];
$Foo->check('foo'); # true
$Foo->check('bar'); # false
eval { Eq[undef]; };
ok $@; # dies
# Check single string equality with undefined
my $Bar = Equ['bar'];
$Bar->check('bar'); # true
my $Undef = Equ[undef];
$Undef->check(undef);
# Can combine with other types
my $Baz = Eq['baz'];
my $ListBaz = ArrayRef[$Baz];
my $Type = $ListBaz | $Baz;
$Type->check(['baz']); # true
$Type->check('baz'); # true
# Easily use pattern matching
my $Publish = Eq['publish'];
my $Draft = Eq['draft'];
my $post = {
status => 'publish',
title => 'Hello World',
};
match_on_type($post->{status},
$Publish => sub { "Publish!" },
$Draft => sub { "Draft..." },
) # => Publish!;
# Create simple Algebraic Data Types(ADT)
my $LoginUser = Dict[
_type => Eq['LoginUser'],
id => Int,
name => Str,
];
my $Guest = Dict[
_type => Eq['Guest'],
name => Str,
];
my $User = $LoginUser | $Guest;
my $user = { _type => 'Guest', name => 'ken' };
$User->assert_valid($user);
match_on_type($user,
$LoginUser => sub { "You are LoginUser!" },
$Guest => sub { "You are Guest!" },
) # => 'You are Guest!';
DESCRIPTION
Types::Equal provides type constraints for single string equality like TypeScript's string literal types.
Eq
Eq
is function of a type constraint Type::Tiny::Eq which is for single string equality.
Equ
Equ
is function of a type constraint Type::Tiny::Equ which is for single string equality with undefined.
NumEq
NumEq
is function of a type constraint Type::Tiny::NumEq which is for single number equality.
NumEqu
NumEqu
is function of a type constraint Type::Tiny::NumEqu which is for single number equality with undefined.
LICENSE
Copyright (C) kobaken.
This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
AUTHOR
kobaken <kfly@cpan.org>