> 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!
