I had some thoughts lately about the Perl 6 operators, and wanted to bounce some
ideas.
--------
Firstly, regarding the string replication ops as documented in Synopsis 3, 'x'
and 'xx', I'm wondering whether it might be better to have something that
incorporates a '~', since that operation is about catenation.
Would perhaps '~*' work better than 'x' to signify better what the operation is
doing; the '~' in this case means catenation and the '*' is meant to invoke
'multiply', not 'whatever'. So '~*' means "catenate a multiple of times".
This would then free up 'x' to be used for something else, if anything.
As for a substitution for 'xx', I'm less sure about that.
Thoughts?
Was that operator called 'x' because it was the best or because that was how
Perl 5 did it, and Perl 6 wanted to not change things if it didn't need to?
--------
Secondly, regarding the Bool type, I think it would be useful for Perl 6 to
define the full complement of dyadic logical operators, of which I count a few
that you don't appear to already have. Probably the best place is in Synopsis 32.
Note that all the dyadic ops I am discussing are meant to be read as infix ops
only.
These are the boolean/logical ops you already have:
Niladic ops aka value literals / constants:
* Bool::False
* Bool::True
Monadic:
* not aka !, but ¬ alias could be added
Dyadic:
* and aka &&, but ∧ alias could be added
* or aka ||, but ∨ alias could be added
* xor aka ^^ aka !===, but ⊻, ↮ aliases could be added
* ===, but xnor, ↔ aliases could be added
Now I'm not sure whether or not [also, andthen, orelse] have the desired
semantics of any others or not, or whether [if, unless] could be used as a
value-resulting infix operator or not.
But here are a few more dyadic:
* nand aka ⊼ aka ↑
* nor aka ⊽ aka ↓
* implies aka imp aka →
* nimp aka ↛
* if aka ←
* nif aka ↚
For that matter, as you know, every single boolean/logical operator could also
have a bitwise analogue, if people were so inclined.
--------
Thirdly, there are I'm sure a number of other aliases that could be added to
other ops, such as ≤ and ≥ for <= and >=, and ≠ for one of the inequality
operators, although that last one would probably make more sense if = was the
equality test operator, so maybe best to avoid ≠ then.
Lots of the other ones I can think of apply to sets, and the ext/Set.pm bundled
with Pugs already documents them quite well.
However, I think some set ops could also be used with hashes. For example, an
alternate way of spelling "exists %foo{$bar}" is "$bar ∈ %foo" or "%foo ∋ $bar".
So, any thoughts?
-- Darren Duncan