特定泛型类型的扩展方法

Nol*_*rin 10 generics extension-methods f# generic-type-argument type-constraints

我正在尝试为F#中绑定到特定泛型类型参数的泛型类型创建各种扩展方法,但该语言似乎不允许我:

我想做的是如下:

type IEnumerable<int> with
    member this.foo =
        this.ToString()
Run Code Online (Sandbox Code Playgroud)

但它给了我编译器错误(强调int关键字):

类型名称中的意外标识符.预期的中缀运算符,引号或其他标记.

下面工作,尽管它没有特异性结合的泛型类型参数int,因为我想:

type IEnumerable<'a> with
    member this.foo =
        this.ToString()
Run Code Online (Sandbox Code Playgroud)

有没有办法在F#中实现这个目标 - 我可能只是使用了错误的语法?如果没有,我会很感激,如果有人可以建议一个解决方法,也许在某处使用类型约束.

dha*_*ech 9

现在可以在F#3.1中使用通用扩展方法:

open System.Runtime.CompilerServices
open System.Collections.Generic

[<Extension>]
type Utils () =
    [<Extension>]
    static member inline Abc(obj: IEnumerable<int>) = obj.ToString()

printfn "%A" ([1..10].Abc())
Run Code Online (Sandbox Code Playgroud)


kvb*_*kvb 7

不幸的是,这在当前版本的F#中是不可能的.在此查看相关问题.