【发布时间】:2014-07-27 18:33:47
【问题描述】:
我的程序有一些具有相同字段名称的记录类型(每种记录类型的含义不同)。编译器坚持匹配此记录形状的函数参数必须是最后声明的类型,即使我声明的记录实例具有明确的字段名称,并且始终将一致的类型传递给每个函数。
处理此问题的适当方法是什么?我知道我可以在函数上添加类型注释,但我觉得如果我以正确的方式做事,我不应该用类型注释来对抗编译器。
演示问题的最少代码:
type type1 = {x:int}
type type2 = {x:int}
let getX t =
t.x
getX {type1.x=1}
|> ignore
编译器输出:
$ fsharpc --nologo test.fs
/tmp/typetest/test.fs(7,6): error FS0001: This expression was expected to have type
type2
but here has type
type1
【问题讨论】: