On Wed, 23 Aug 2017 06:20:49 -0700, b...@abrij.org wrote: > On Mon, 24 Jul 2017 10:04:54 -0700, c...@zoffix.com wrote: > > The coercion works fine here: > > > > 17:03 Zoffix m: class B {…}; class A { method B { B.new }}; class > > B > > {}; sub foo(B() $b) { say "hi" }; foo(A.new) > > 17:03 camelia rakudo-moar 2fb8c7: OUTPUT: «hi?» > > > > But if I add `:D` smiley, it fails: > > > > 17:03 Zoffix m: class B {…}; class A { method B { B.new }}; class > > B > > {}; sub foo(B:D() $b) { say "hi" }; foo(A.new) > > 17:03 camelia rakudo-moar 2fb8c7: OUTPUT: «Type check > > failed > > in binding to parameter '$b'; expected B but got A (A.new)? in sub > > foo at <tmp> line 1? in block <unit> at <tmp> line 1??» > > > > https://irclog.perlgeek.de/perl6/2017-07-24#i_14915397 > > Seems to be more generic than custom classes: > > $ perl6 -e 'sub foo(Int() $b) { say $b }; foo("42")' > 42 > $ perl6 -e 'sub foo(Int:D() $b) { say $b }; foo("42")' > Type check failed in binding to parameter '$b'; expected Int but got > Str ("42") > in sub foo at -e line 1 > in block <unit> at -e line 1 > > This raises the spec question, should e.g. IO:U($a) try to convert $a > to an IO, > and if that succeeds, succeed the bind with the type object of > whatever doer (or > subclass were IO a class) of IO which resulted? Or fail the bind? > The latter is > more consistent with the above desired behavior... but does > "Class:D()" mean > coerce-to-then-check-definedness, or go-all-out-to-make-a-defined- > value? > > This doesn't make much sense yet either: > > $ perl6 -e 'Int:D(4).say' > (Int:D)
This ticket and RT#126433 can be combined.