Идея выражения полиморфного совпадения противоречит самой идее объектно-ориентированного программирования! Настройка поведения должна быть заключена в объекты, для этого они и предназначены. Код, задающий класс «кто ты, на самом деле», сигнализирует о проблеме проектирования.
Тем не менее, если вы действительно хотите, чтобы классы могли сказать вам, что они на самом деле, самый простой способ - просто добавить метод для этого:
type typ = A | B
class bar =
object
method typ = A
end
class rebar =
object
method typ = B
end
class foo param =
object
initializer
match param#typ with
| A -> print_endline "This is a A"
| B -> print_endline "This is a B"
end
Не используйте для этого полиморфные варианты, так как вы лишаетесь преимущества исчерпывающего сопоставления с образцом в операциях обслуживания.
Опять же, если вы это сделаете, вы, вероятно, игнорируете принцип подстановки Лискова и готовите рабочие дни для сотрудника по обслуживанию вашего кода. Нашему миру не нужна эта жестокость!