use Test;
role R[::T] {
has T $.a
}
class A does R[subset :: of Int where {0 <= $_ <= 99}] {}
class B does R[subset :: of Str where { .chars == 3 }] {}
is A.new(:99a).a, 99;
dies-ok { A.new: :999a };
is B.new(:a<bla>).a, "bla";
dies-ok { B.new(:a<aaaa>) };
done-testing