En C#, je peux mettre en œuvre une interface générique deux fois sur une classe, en utilisant deux paramètres de type-différents:La mise en œuvre de la même interface à différents instanciations génériques
interface IFoo<T> { void Foo(T x); }
class Bar : IFoo<int>, IFoo<float>
{
public void Foo(int x) { }
public void Foo(float y) { }
}
Je voudrais faire la même chose en 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 =()
Mais il donne une erreur du compilateur:
This type implements or inherits the same interface at different generic instantiations
'IFoo<float>'
and'IFoo<int>'
. This is not permitted in this version of F#.
Je ne peux pas trouver discussion of this issue sur le web. Une telle utilisation est-elle mal vue pour une raison quelconque? Est-il prévu d'autoriser cela dans une prochaine version de F #?
Feature prévu pour F # 4.0 http://fslang.uservoice.com/forums/245727- f-language/suggestions/5663504-allow-to-implement-the-same-interface-at-different – foobarcode
Demande de tirage peut être trouvé à: https://github.com/Microsoft/visualfsharp/pull/18 – forki23