Сводка проблемы
В тот момент, когда я использую f #, я должен явно привести значение к родительскому типу его типа, чтобы получить выражения сопоставления с образцом для правильной проверки типа. В идеале я хотел бы сделать более аккуратный способ.
Пример
Предположим, у меня есть некоторая иерархия классов:
type Foo () =
abstract member Value : unit -> string
type A (i:int) =
inherit Foo ()
override this.Value () = i.ToString()
type B (s:string) =
inherit Foo ()
override this.Value () = s
В идеале и в некоторых языках программирования обычно я бы написал эквивалент следующего:
let bar (i:int) : Foo =
match i with
| 1 -> B "one"
| _ -> A i
Однако это не соответствует типу проверки, что дает мне ошибку " но мой реальный пример - создание экземпляров классов C #, где они являются обычными классами.
Спасибо за любую помощь в этом вопросе.