Checking for nil return

[email protected] (yary) Sat, 19 Dec 2020 21:16:19 -0500
Newsgroups perl.perl6.language
Message-ID <CAG2CFAa8NR2qrAO8mcmjTxd-PVTDjgLT7eZ7shKXWuuLVNeNoQ@mail.gmail.com>
--000000000000f592a305b6dbed7e
Content-Type: text/plain; charset="UTF-8"

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.

The subtype works as I expect as an the argument check

> sub in-check (non-Nil $in) { $in }
&in-check
> in-check(33)
33
> in-check(Nil)
Constraint type check failed in binding to parameter '$in'; expected
non-Nil but got Nil (Nil)
  in sub in-check at <unknown file> line 1
  in block <unit> at <unknown file> line 1

$ raku --version
This is Rakudo version 2020.07 built on MoarVM version 2020.07
implementing Raku 6.d.

Is this my understanding of return type checking that's off, or a known
issue, or something I should add to an issue tracker?

-y

--000000000000f592a305b6dbed7e
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr"><div dir=3D"ltr"><div dir=3D"ltr"><div dir=3D"ltr"><div di=
r=3D"ltr"><div dir=3D"ltr"><div dir=3D"ltr">Is this a known issue, or my mi=
sunderstanding?</div><div dir=3D"ltr"><br></div><div dir=3D"ltr">&gt; subse=
t non-Nil where * !=3D=3D=3D Nil;<br></div><div dir=3D"ltr">(non-Nil)</div>=
<div dir=3D"ltr"><div dir=3D"ltr"><div dir=3D"ltr">&gt; sub out-check($out)=
 returns non-Nil { return $out }</div><div dir=3D"ltr">&amp;out-check</div>=
<div dir=3D"ltr">&gt; out-check(44)</div><div dir=3D"ltr">44</div><div dir=
=3D"ltr">&gt; out-check(Nil)</div><div dir=3D"ltr">Nil</div><br>^ Huh, I ex=
pected an exception on &quot;out-check(Nil)&quot; saying the return value f=
ailed the &quot;returns&quot; constraint.</div><div dir=3D"ltr"><br></div><=
div>The subtype works as I expect as an the argument check</div><div dir=3D=
"ltr"><br></div><div dir=3D"ltr">&gt; sub in-check (non-Nil $in) { $in }</d=
iv><div dir=3D"ltr">&amp;in-check</div><div dir=3D"ltr">&gt; in-check(33)</=
div><div dir=3D"ltr">33</div><div dir=3D"ltr">&gt; in-check(Nil)</div><div =
dir=3D"ltr">Constraint type check failed in binding to parameter &#39;$in&#=
39;; expected non-Nil but got Nil (Nil)</div><div dir=3D"ltr">=C2=A0 in sub=
 in-check at &lt;unknown file&gt; line 1</div><div dir=3D"ltr">=C2=A0 in bl=
ock &lt;unit&gt; at &lt;unknown file&gt; line 1</div><div><br></div></div><=
div dir=3D"ltr"><div dir=3D"ltr">$ raku --version</div><div dir=3D"ltr">Thi=
s is Rakudo version 2020.07 built on MoarVM version 2020.07</div><div dir=
=3D"ltr">implementing Raku 6.d.</div></div><div dir=3D"ltr"><br></div><div>=
Is this my understanding=C2=A0of return type checking that&#39;s off, or a =
known issue, or something I should add to an issue tracker?</div><div><br><=
/div><div dir=3D"ltr"><div><div dir=3D"ltr" class=3D"gmail_signature">-y<br=
></div></div></div></div></div></div></div></div></div>

--000000000000f592a305b6dbed7e--