On Tue, Jan 05, 2010 at 11:52:42AM -0500, Solomon Foster wrote:
: On Tue, Jan 5, 2010 at 11:36 AM, Ovid
: <publiustemp-perl6langua...@yahoo.com> wrote:
: > --- On Tue, 5/1/10, Solomon Foster <colo...@gmail.com> wrote:
: >
: >> From: Solomon Foster <colo...@gmail.com>
: >
: >> > Is this a bug or just documented behavior that I don't
: >> know about?
: >>
: >> fail just returns an uncalled exception.  What does
: >> that do in a where block?
: >
: > I knew it returned an uncalled exception, but I'm still not expecting the 
sub call to be skipped silently due to a constraint failure.  Silent failures 
are bad :)
: 
: Good point.  :)

I think it's fine to return a failure, but we'll need to distinguish two
different kinds of constraint checks, mandatory vs discretionary.  In

    my Constraint $x = 42;

the Constraint is mandatory, and should die if the constraint check
returns a failure.  In the typical multi-dispatch, however, you
just want a failure to mean "look elsewhere".  (You can still
force a die there if you really want it.)

To the first approximation, a mandatory check requires a defined
"where" return value, while a discretionary check only requires a
true value.

(Note that a constraint on the parameter of an "only" sub is already
mandatory, not discretionary, at least in the sense that the call
will fail if the binding is unsuccessful.  So that probably falls
out naturally, though perhaps loses track of the failure message
currently.)

Larry

Reply via email to