为什么我只能在成员方法中将F#函数传递给System.Func参数?

Mil*_*oDC 8 f# function

这有效:

type MyType () =
    static member MyFn (fn : Func<bool>) = fn.Invoke ()

MyType.MyFn (fun _ -> false)
Run Code Online (Sandbox Code Playgroud)

这不(错误FS0002):

let myFn (fn : Func<bool>) = fn.Invoke ()

myFn (fun _ -> false)
Run Code Online (Sandbox Code Playgroud)

这也不是(错误FS0002):

type MyDU = Fn of Func<bool>

Fn (fun _ -> false)
Run Code Online (Sandbox Code Playgroud)

这种相当恼人的不一致的原因是什么?

kvb*_*kvb 11

F#规范的第8.13.7节(成员调用中的类型导向转换)涵盖了此行为,其中指出:

注意:这些类型定向转换主要用于与现有基于成员的.NET库的互操作性,不适用于在模块中定义的函数的调用或在表达式中本地绑定的函数.