Audrey Tang wrote:
Jonathan Lang wrote:
> A variation of chaining associativity gets
> used, with the "chaining rule" being '$v1 op1 $v2 // $v1 op2 $v3'
> instead of '$v1 op1 $v2 && $v2 op2 $v3', as is the case for comparison
> chaining.
But wouldn't that make:
True ?? undef !! Moose;
evaluate to Moose, instead of undef as we wanted?
Nope; because of the short-circuiting behavior:
True ?? undef !! Moose
->
True ?? undef // True !! Moose
The condition evaluates to True, causing the ?? to evaluate its RHS
and then short-circuit the rest of the expression. The fact that the
RHS evaluates to undef is irrelevant.
In a sense, ?? and !! would invert the usual short-circuiting
behavior: with normal short-circuiting operators (&& and ||), the RHS
is evaluated if and only if the operator does not short-circuit; with
?? and !!, the RHS would be evaluated if and only if the operator
_does_ short-circuit.
NeonGraal wrote:
Surely if you defined !! to return "undef but true" and both operators
to be left associative then it all works.
1==0 ?? "True" !! "False" -> (undef) !! "False" which seems right to
me.
1==1 !! "False" ?? "True" -> (undef but true) ?? "True" also good.
...except that '1==1 !! "False"' would return 'undef but true' on a
failure. I'm sure that a rationale could be provided for doing this;
but it's a potentially surprising result which could get you in
trouble. Best to keep to a simple 'undef' result on a failure.
Hakim: I'm not familiar with Haskell, so I can't follow your code as
well as I need to to provide an informed response.
Juerd Waalboer wrote:
Zev Benjamin wrote:
> ?? and !! could always return some kind of result object that boolizes
> to true or false.
Can we *please* keep simple things simple?
Agreed. I'm in favor of this proposal to the extent that it breaks a
simple trinary operator down into equally simple binary operators
(with the trinary form continuing to exist as an emergent property of
the interaction of the binaries); if those binary operators become
more complex than the trinary form, or if you lose the ability to
recover the trinary form from them, there's no point in pursuing this
proposal.
--
Jonathan "Dataweaver" Lang