> On 20 Oct 2025, at 16:59, Quanrong via perl6-users <[email protected]> 
> wrote:
> Hi all, I'm learning Raku and enjoying it tremendously, it's a beautiful and 
> well thought language.

Glad to hear that!


> I was very surprised to find that, even if you declare the return type of a 
> subroutine with the `:D` smiley, subroutines are still allowed to return 
> `Nil`.
> 
> What is the reason for this? It would be very useful to be able to state that 
> a subroutine must not return `Nil`. And, if this is not possible, shouldn't 
> the `:D` smiley be disallowed for the return type in a signature?
> 
> I suppose there has to be a good reason for this.

It was designed that way.   This also goes for Failure objects, which are a 
subclass of Nil.

Nil (and its subclass Failure) are exempt from type checking.

The case of Failure should be clear: if you want to return a Failure because 
something went wrong, you don't want it to trip off the type checking.

You should think of Nil as a type of benevolent Failure: nothing really wrong, 
but it could not produce an actual value.


Hope this made sense!

Reply via email to