Having prod, tprod, ctprod and their types makes it difficult for the compiler to guess the types of the outputs, which leads to instability. An alternative could be not assuming that each operator will have prod, and instead define subtypes and * for each one.
Example:
- Remove generic
*(A, v);
- Implement subtype
MatricialLinearOperator;
- Define
*(A, v) for this subtype.
We could then define everything in term of subtypes:
One downside would be implementing a lot of new types and their interactions. For instance, adjoint of an operator would depend on the operator.
Related to #97 and #104