Re: Rationale of return types from subroutines always being nullable?

[email protected] (ToddAndMargo via perl6-users) Tue, 21 Oct 2025 00:23:35 -0700
Newsgroups perl.perl6.users
Message-ID <[email protected]>
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