yary <not....@gmail.com> wrote: > Is this a known issue, or my misunderstanding? > >> subset non-Nil where * !=== Nil; > (non-Nil) >> sub out-check($out) returns non-Nil { return $out } > &out-check >> out-check(44) > 44 >> out-check(Nil) > Nil > > ^ Huh, I expected an exception on "out-check(Nil)" saying the return value > failed the "returns" constraint.
I'm seeing the same behavior that Yary does, and it does seem pretty peculiar. I would guess it has to do with this behavior: # https://docs.raku.org/type/Nil#index-entry-Nil_assignment # When assigned to a container, the Nil value (but not any subclass # of Nil) will attempt to revert the container to its default # value; if no such default is declared, Raku assumes Any. Something like: the Nil is getting transformed into an empty (Any), which passes the constraint, but then gets turned back into a Nil later.