Предположим, у меня есть следующий код:Коллекция объектов, которые реализуют общий интерфейс в F #
type A =
abstract member hi: string
type B() =
interface A with
member self.hi: string = "Hello"
type C() =
interface A with
member self.hi: string = "Yo"
я могу сделать F # s тип проверки счастливый список объектов типа A
и B
до тех пор, как я явно указать тип интерфейса, ala:
let l: A list = [ B(); C() ]
Но я немного в тупике, когда общие параметры вводят изображение. Например,
type A<'T> =
abstract member thing: 'T
type B() =
interface A<int> with
member self.thing: int = 1
type C() =
interface A<string> with
member self.thing: string = "Yo"
и я пытаюсь использовать что-то вроде
let l: A<_> list = [B(); C()]
F #, кажется, хочет упорно заполнить параметр универсального типа:
error FS0001: The type 'C' is not compatible with the type 'A<int>'
Следует заметить, что я использовал этот шаблон в Java со стандартными интерфейсами и в Scala с чертами, поэтому я удивлен, что я не могу сделать это в F #. Что мне здесь не хватает?