f# - F# 模块签名文件的用例是什么?

标签 f# signature

与 OCaml 不同,F# 模块签名文件大多无用,因为 F# 没有仿函数吗?

F# 模块签名文件的用例是什么?

最佳答案

为 future 的读者澄清 :此答案是在更新之前为原始问题编写的。原来的问题是:

Are F# signatures mostly useless, unlike OCaml, because F# doesn't have functors?

What are use cases for F# signatures?



虽然 F# 没有 OCaml 模块和仿函数,但它确实有接口(interface)和对象,它们提供了类似的功能,但功能有限。这些确实需要类型签名,因为类型推断不适用于它们。例如:
type MyIntf =
    abstract member m : sting -> int

let f i = i.m "hello"  
// ^ error: cannot lookup member "m" on object "i" of indeterminate type

请注意,我已经需要一个类型注释来定义接口(interface),因为在没有成员 m 的实现的情况下没有其他类型信息来源。 .但即使除此之外,如果没有显式类型,我的接口(interface)的使用也无法正常工作。

虽然不清楚推断对象和接口(interface)的类型实际上是不可能的,但 F# 并没有尝试这样做。官方的 F# 政策是,只要你是纯函数式的,你就会受到 HM 类型的干扰,但是一旦你进入对象和成员,你就只能靠自己了,编译器不会帮助你。

实现上述功能f工作,我必须注释 i 的类型范围:
let f (i : MyIntf) = i.m "hello"   // works now

除了这个技术要求之外,类型注释当然作为文档非常有值(value)(保证不会不同步),以及失控类型推断的障碍。

关于f# - F# 模块签名文件的用例是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49096189/

相关文章:

iphone - 如何解决iPhone错误 "signature is valid but not trusted"?

f# - 使用柯里化(Currying)会导致 F# 的性能下降吗?

f# - 为什么 F# 中的函数以这种方式实现?

javascript - Heroku Node.js Amazon S3 直接上传教程 - SignatureDoesNotMatch

java - 在 C# 中验证 RSA SHA256 签名

java - ITMS-90238 : Invalid Signature when submitting to AppStore with bundled AdoptOpenJDK

javascript - 有没有办法将 JSON 转换为 SVG 对象?

ios - SCN四元数乘法

f# - 任何地方都有 option<> 计算表达式吗?

F#:开发定理证明器可以吗?