Я исправил все проблемы компиляции. Когда вы унаследовали от коллеги, вам необходимо указать параметр типа. В результате, конкретная Коллегия, я считаю, тоже нуждается в параметре типа. Кроме того, вы забыли передать аргумент конструктора mIn унаследованному классу. И я добавил параметр типа к вашему сторожевому типу для myColleague, используя тип объекта.
class virtual ['mediator] colleague mIn = object
val m = mIn
method virtual getmediator : 'mediator
end;;
class ['mediator] concreteColleague mIn =
object inherit ['mediator] colleague mIn
method getmediator = m
end;;
(* Some other classes here *)
class mediator = object (self : 'self)
val mutable myColleague = (None:'self colleague option)
initializer
myColleague <- Some (new concreteColleague self)
end;;
Однако я не знаком с шаблоном посредника, поэтому я не уверен, как правильно реализовать шаблон посредника. Вы уверены, что вам нужны объекты, виртуальные классы и прочее?