В С# я могу реализовать общий интерфейс дважды в одном классе, используя два разных типа-параметра:
interface IFoo<T> { void Foo(T x); }
class Bar : IFoo<int>, IFoo<float>
{
public void Foo(int x) { }
public void Foo(float y) { }
}
Я хотел бы сделать то же самое в F #:
type IFoo<'a> = abstract member Foo : 'a -> unit
type Bar() =
interface IFoo<int> with
[<OverloadID("int")>]
member this.Foo x = ()
interface IFoo<float> with
[<OverloadID("float")>]
member this.Foo x = ()
Но это дает ошибку компилятора:
Этот тип реализует или наследует один и тот же интерфейс при разных генерируемых экземплярах
'IFoo<float>'
и'IFoo<int>'
. Это недопустимо в этой версии F #.
Я не могу найти обсуждение этой проблемы в Интернете. По какой-то причине такое использование нахмурилось? Планируются ли это в следующем выпуске F #?