> On 21 Oct 2025, at 09:23, ToddAndMargo via perl6-users <[email protected]> 
> wrote:
> 
> 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,

Well, you could want it when you want to make sure something gets initialized:

$ raku -e 'sub a(--> Int:D) { my Int $b; $b }; 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

Reply via email to