gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 15:17:58 26 4
gpt4 key购买 nike

与 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com