Por curiosidade, existem idiomas que permitem definir aritmética nos tipos para criar novos tipos? Algo como:
interface A {
void a();
void b();
}
interface B {
void b();
void c();
}
interface C = A & B; // has b()
interface D = A | B; // has a(), b() and c()
interface E = (A & B) ^ B; // has c()
Eu sei que em algumas linguagens essas idéias podem ser expressas (isto é, Java possui List<Comparable & Serializable>para a união das interfaces), mas nunca ouvi falar de uma linguagem que suporte aritmética de tipo. Obrigado!
CanWriteAndCompare extends Serializable, Comparable {}) e eu estava pensando em como generalizar isso.
Aou um B, com duas implementações que parecem exatamente iguais. No método, estou chamando um método polimórfico que pode levar um Aou um B, de modo que as implementações são as mesmas, mas como tenho que usar dois tipos distintos, preciso de duas implementações. Isso seria mais fácil se eu pudesse fazer myMethod(A | B aOrB).
OrA operação pode ser emulada por herança múltipla.