我正在试图弄清楚为什么不能编译。
type A() =
member __.M(f:DateTime -> seq<int>) = ()
member __.M(f:DateTime -> obj) = ()
let a = A()
a.M(fun d -> seq [d.Year]) // 'd' is indeterminate type
如果我删除第二个重载或向d
添加类型注释,它确实如此。是因为在类型检查之前发生了重载解析的某些方面吗?
答案 0 :(得分:1)
是的,基本上重载会使类型推断变得困难。在这种情况下,您似乎希望编译器对DateTime -> seq<int>
和DateTime -> obj
类型进行某种推广以获得DateTime -> ?
,然后从那里开始,但我不喜欢我认为它曾经做过那种“反统一”。