Контравариантные бинарные операции в Scala
Для очень простой общей модели категорий я пытаюсь сопоставить морфизм, связанный с парой объектов.
class Obj[DerivedObj <: Obj[DerivedObj]] { /* ... */ }
class Morphism[DerivedMorphism <: Morphism[DerivedMorphism]] { /* ... */ }
Я хотел бы как-нибудь определить:
def mor( from : SomeConcreteObj, to : SomeConcreteObj ) : SomeConcreteMorphism;
но "очевидное" решение сделать mor методом Obj потребовало бы, чтобы Obj был дополнительно параметризован по типу морфизмом.
Каким способом Scala это сделать?
1 ответ
Решение
ОК, плохие отношения с моей стороны. Предположительно подразумевается, что mor на самом деле является методом некоторого класса Category:
trait Cat[O,M] {
def mor( from : O, to : O ) : M;
}
который, казалось бы, решил проблему.