On 10/20/25 10:28 AM, Quanrong via perl6-users wrote:
> Oh, but it *does* serve a purpose, and it *will* fire under the right
circumstances! For instance:
>
> $ raku -e 'sub a(--> Int:D) { Int }; a'
> Type check failed for return value; expected Int:D but got Int (Int)
> in sub a at -e line 1
> in block <unit> at -e line 1
You are right! I had missed that, it's very obvious in retrospective.
Now I understand.
Thanks for your help! And for working on Raku :)
Okay, made me look up what an Int:D is. This back
from search.brave.com's AI:
In Raku, Int:D refers to a type constraint that specifies
a defined value of the Int type. It is used to restrict
a variable or parameter to only accept instances of the
Int class (i.e., actual integer values), excluding the
Int type object itself. For example, declaring
my Int:D $x = 42;
ensures that $x can only hold an integer value and not
the Int type object. This constraint is useful for enforcing
that a variable contains a concrete, defined integer rather
than a type object. The :D smiley stands for "definite,"
indicating that the value must be defined.
I use Int a lot. When would Int:D be useful? When you
want the finger wagged at you if you send a Nil?
Yours in confusion,
-T