Контравариантные бинарные операции в 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;

}

который, казалось бы, решил проблему.

Другие вопросы по тегам