F# 4.0 with inheritance throwing FS0073 internal error: the mustinline value 'Foo' was not inferred to have a known value

F# 4.0 with inheritance throwing FS0073 internal error: the mustinline value 'Foo' was not inferred to have a known value

我知道 this was asked before 但我敢冒被关闭的风险,因为原来的问题已经三年了,我们现在有两个主要的 F# 版本。

更新:我有 reported this as a bug to the F# team,但我仍然很好奇是否存在解决方法。

遵循 F# 的 classic OO 范式,我试图通过基础 class 继承共享成员,但在内联方法上立即出现以下错误(在这种特殊情况下,确实需要内联)。

Error FS0073: Internal error: The mustinline value 'SomethingElse' was not inferred to have a known value
Error FS1113: The value 'SomethingElse' was marked inline but its implementation makes use of an internal or private function which is not sufficiently accessible

在 Visual Studio 2015 年使用 F# 4.0 引发此错误的最小化示例:

type A() =
    static member inline dosomething() = ()

type B() =
    inherit A()
    member inline this.SomethingElse a = a + 10

我很好奇。第一个错误似乎表明类型推断失败。但是,添加特定类型的装饰似乎没有帮助。

错误二表明存在一些被认为不可访问的隐藏成员。我找不到一个。添加显式 public 成员来欺骗编译器也无济于事。

到目前为止我的结论是:class 中有任何内联实例成员(它不会发生在静态成员上)似乎会导致编译错误。也许这类似于不允许内联接口成员,这是可以理解的,但那样的话,非继承成员仍然可以被标记为内联。

在过去三年中有什么想法 and/or 解决方法?

这个问题的正确答案是:这是一个错误。

作为 report shows,此问题已得到确认并同时得到修复,将成为 F# 下一次更新的一部分。

该问题的修复日期(合并到 master 分支的日期是 2016 年 2 月)表明它属于更新 3(但我看不到它在那里工作)或即将到来的 F# 4.1。