{"atom":"regression/attr-container-type","family":"regression","slug":"attr-container-type","header":{"atom":"regression/attr-container-type","kind":"whole-program — a minimal repro, not yet reduced to an atom","source":"curated"},"axes":null,"cols":null,"engines":["rakudo-2026.07","rakupp-3.14.0"],"kinds":["ref","pp"],"defFrom":"rakupp:t/regression/attr-container-type.raku","counts":{"a":1,"f":0,"d":0,"c":0,"r":0,"n":0},"files":["atoms/regression/attr-container-type.grid"],"records":[["0001","","# Regression: two fixes found taking DBIish and Config further, 2026-08-04.\n# Both are general; the modules only showed where to look. Checked against\n# Rakudo.\n\nmy $ok = True;\nsub ck($got, $want, $l) { unless $got eqv $want { say \"FAIL: $l — {$got.raku} vs {$want.raku}\"; $ok = False } }\n\n# 1. `has %.x is SomeType` makes the attribute an INSTANCE of that type, not a\n#    plain Hash. Only the QuantHash family was recognised, so DBIish's\n#    `has %.Converter is DBDish::TypeConverter` stayed a Hash and `.convert` on\n#    it was \"No such method\".\n{\n    my class C does Associative { has %!s handles <AT-KEY>; method m() { 'C' } }\n    my role  R does Associative { has %!s handles <AT-KEY>; method m() { 'R' } }\n    my class H {\n        has %.c is C;\n        has %.r is R;\n        has %.q is Set;     # the QuantHash family still works\n        has %.plain;        # and an untraited hash is untouched\n    }\n    my $h = H.new;\n    ck(($h.c.^name, $h.r.^name), ('C', 'R'), 'a class and a role both instantiate');\n    ck(($h.c.m, $h.r.m), ('C', 'R'), 'and their methods are reachable');\n    ck($h.q.^name, 'Set', 'is Set is unchanged');\n    ck($h.plain.^name, 'Hash', 'and a plain hash attribute stays a Hash');\n}\n\nsay $ok ?? 'PASS' !! 'FAIL';","output PASS","a",["PASS","PASS"],0,[["budget","20s"]]]]}