Tangente ( 0.3 spec ) utilizza qualcosa di simile a questo. (disclaimer: questo è il mio piccolo progetto di ricerca)
Attualmente with
agisce come un sindacato che modella l'ereditarietà, sebbene il pragmatismo lo abbia reso non commutativo. Una volta introdotte le implementazioni sui metodi, una stretta unione di metodi con lo stesso nome spesso non è ciò che si desidera e impossibile da fare comunque.
intersect
è supportato dall'inferenza del tipo di modelli per qualcosa come foo(T,T)
in cui i parametri sono diversi.
I complementi erano interessanti, ma portavano a tipi parziali che non sembravano così utili e / o problematici da includere correttamente, quindi non sono inclusi.
So che ci sono altri linguaggi di ricerca in cui ho trovato qualcosa di simile, ma al momento non riesco a ricordarli. Il problema principale è che le cose non sono veramente utili senza la tipizzazione strutturale, che non è molto popolare in sé. L'altro è che è necessario un tipo di tipo (tipo di tipi) per memorizzare il tipo costruito, oppure è semplicemente una scorciatoia per qualcosa che non è particolarmente idiomatico senza quella capacità. E questo è molto meno comune della tipizzazione strutturale.
È di parte, e non è molto, ma è così.