If I understand correctly, so far we have the following meta-operators: [ ] circumfix meta-operator on infix operator which produces a prefix operator
>> << circumfix meta-operator on infix operator which produces an infix operator = postfix meta-operator on infix operator which produces an infix operator >> prefix meta-operator on postfix operator which produces a postfix operator << postfix meta-operator on prefix operator which produces a prefix operator In other words: +---------+-----------+-------------+------------+ | Meta-op | is | operates on | to produce | +---------+-----------+-------------+------------+ | [ ] | circumfix | infix | prefix | +---------+-----------+-------------+------------+ | >> << | circumfix | infix | infix | +---------+-----------+-------------+------------+ | = | postfix | infix | infix | +---------+-----------+-------------+------------+ | >> | prefix | postfix | postfix | +---------+-----------+-------------+------------+ | << | postfix | prefix | prefix | +---------+-----------+-------------+------------+ >From this table, we can see that [ ] is the only meta-operator that produces a different 'type' of operator from that which it accepts, which might be where the confusion lies. As long as each meta-operator explicitly knows what type of regular operator it accepts (and produces), there shouldn't be any problems with ambiguity.