use strict;
use warnings;

use Test::More;

{
    package SomeClass;
    use Moose;
    use Moose::Util::TypeConstraints;

    subtype 'DigitSix' => as 'Num'
        => where { /^6$/ };
    subtype 'TextSix' => as 'Str'
        => where { /Six/i };
    coerce 'TextSix'
        => from 'DigitSix'
        => via { confess("Cannot live without 6 ($_)") unless /^6$/; 'Six' };

    has foo => (
        is      => 'ro',
        isa     => 'TextSix',
        coerce  => 1,
        default => 6,
        lazy    => 1
    );
}

my $attr = SomeClass->meta->get_attribute('foo');
is($attr->get_value(SomeClass->new()), 'Six');
is(SomeClass->new()->foo, 'Six');

done_testing;
