查找不确定类型的对象

时间:2011-08-26 19:43:15

标签: f# type-inference

我正在试图弄清楚为什么不能编译。

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添加类型注释,它确实如此。是因为在类型检查之前发生了重载解析的某些方面吗?

1 个答案:

答案 0 :(得分:1)

是的,基本上重载会使类型推断变得困难。在这种情况下,您似乎希望编译器对DateTime -> seq<int>DateTime -> obj类型进行某种推广以获得DateTime -> ?,然后从那里开始,但我不喜欢我认为它曾经做过那种“反统一”。