Implementation and syntax is obviously up for debate: For example, closure could work too e.g. 3 ^(+) 3, but I couldn’t figure out how to do it; I don’t know how to return an anonymous function that behaves like an operator.
I feel like a more general exponentiation operator has several benefits:
Convenient and intuitive iteration of any closed binary operator (e.g. the main post) without having to implement a new ^ method for custom types
When you have more than one product-like operation defined, you can eliminate ambiguity as to which operation your exponentiation is referring to.
If you want to be more strict, instead of overloading ^ for custom types to mean iteration of some non-* operator, you can instead specify exactly what you mean without much loss in convenience.
As for how useful it would be in practice…I’m not the person to ask.
My dream is for regular exponentiation x^p to just be a special case via
Interesting generalization… It’s basically providing a shorter reduce syntax for the case where the collection is a repetition of the same element. Then I would rather provide nice syntax for the collection itself: