让我们看一个简单的函数值f1
:
let f1 = printfn "*bind f1*"; fun () -> printfn "f1()"
f1
在 FSI 中绑定为
*bind f1*
val f1 : (unit -> unit)
并且,被调用,行为符合预期
> () |> f1 |> f1;;
f1()
f1()
val it : unit = ()
现在让我们取一个类似的函数值,但明确地通用f2<'a>
:
let f2<'a> = printfn "*bind f2*"; fun () -> printfn "f2()"
f2
在 FSI 中绑定为
val f2<'a> : (unit -> unit)
没有任何*bind f2*
输出,但随后被调用,在每次f2
调用时输出它:
> () |> f2 |> f2;;
*bind f2*
f2()
*bind f2*
f2()
val it : unit = ()
我的问题是:这种观察到的差异可能是什么原因?