F# 如何重载静态方法并使用泛型类型约束

F# 如何重载静态方法并使用泛型类型约束,f#,type-constraints,F#,Type Constraints,给定以下类型及其重载方法 type ToOptionString = ToOptionString with static member ($) (_: ToOptionString, l: string) : Option<string> = Some l static member ($) (_: ToOptionString, l: Option<string>) : Option<string> = l static membe

给定以下类型及其重载方法

type ToOptionString = ToOptionString
with
    static member ($) (_: ToOptionString, l: string) : Option<string> = Some l
    static member ($) (_: ToOptionString, l: Option<string>) : Option<string> = l
    static member ($) (_: ToOptionString, l: Option<int>) : Option<string> = 
       l |>> sprintf "%A"

let inline toOptionString v = ToOptionString $ v
我得到以下错误

A unique overload for method 'op_Dollar' could not be determined based on 
type information prior to this program point. A type annotation may be 
needed. Candidates: 
static member ToOptionString.( $ ) : ToOptionString * l:Option<int> -> Option<string>, 
static member ToOptionString.( $ ) : ToOptionString * l:Option<string> -> Option<string>

val toOptionString : v:'a -> '_arg3 (requires member ( $ ))
无法根据确定方法“op_-Dollar”的唯一重载
在此程序点之前键入信息。类型批注可以是
需要。候选人:
静态成员ToOptionString.($):ToOptionString*l:Option->Option,
静态成员ToOptionString。($):ToOptionString*l:Option->Option
val-toOptionString:v:'a->'\u arg3(需要成员($)

所以在我看来,重载时,我不能使用带有泛型类型参数的类型。有人知道解决这个问题的方法吗?

我想操作符
>
来自F++,如果是这样的话,我可以确认你的示例对我来说编译得很好。试着找到一些复制错误的东西,这似乎是重载之间的歧义。是的,这是来自fsharpplus。但这绝对不是问题所在。您可以简单地返回一个常量值,比如
Some“foo”
,但它仍然会在调用站点导致该错误正如我所说的,我没有收到任何错误。我试过F#4.0和F#4.1。你用的是哪个版本?我用的是4.0。您是否在其他模块中使用了
toOptionString
?这对我来说同样有效,但效果很好。
A unique overload for method 'op_Dollar' could not be determined based on 
type information prior to this program point. A type annotation may be 
needed. Candidates: 
static member ToOptionString.( $ ) : ToOptionString * l:Option<int> -> Option<string>, 
static member ToOptionString.( $ ) : ToOptionString * l:Option<string> -> Option<string>

val toOptionString : v:'a -> '_arg3 (requires member ( $ ))