I'm still contemplating how to get rid of the :: in the
ternary and make :: unequivocally available for a type
sigil and as a binary infix for symbol lookup. 

Here's a possible solution:

1) ?? becomes a binary operator that behaves as follows:
   a) it evaluates its lhs in boolean context
   b) if this is true, ?? evaluates its rhs such that it
      can't be undef
   c) if this is false, ?? returns undef

2) the precedence of ?? is above // which naturally catches
   the undef of a false condition.

This gives

   $x = $y < 3 ?? "small" // "large";

and possibly even a low precedence version

   $x = $y < 3 then      "small" err "large";  # hmm
               thence                          # old fashioned
               therefore                       # long, but clear

An implementation could read:

&*infix:<??> (&cond, &code)
  is parsed(...) # trait needed to insert {}?
   if &cond() { return &code() but defined }
   else       { return undef }



Reply via email to