F# 在 func `lambda` 和 `lambda` 之间存在差异 |> func
F# has a discrepancy between func `lambda` and `lambda` |> func
我正在使用 FSharpPlus 库,但两者之间存在差异
#r "nuget: FSharpPlus"
open FSharpPlus
memoizeN (fun x y -> x,y) // error FS0073: internal error: recursive class hierarchy (detected in TypeFeasiblySubsumesType), ty1 = MemoizeN
(fun x y -> x,y) |> memoizeN // OK
为什么会出现这种情况,有没有办法使用前者?
这不是因为 lambda,这是一种角落类型推理案例。
F# 类型推断是从左到右进行的,因此在某些情况下,它无法推断出泛型函数的正确类型,除非其参数的类型信息已经被推断出来。
一个更简单的案例可能是这样的:
let x = (fun lst -> lst.Length) [0]
我正在使用 FSharpPlus 库,但两者之间存在差异
#r "nuget: FSharpPlus"
open FSharpPlus
memoizeN (fun x y -> x,y) // error FS0073: internal error: recursive class hierarchy (detected in TypeFeasiblySubsumesType), ty1 = MemoizeN
(fun x y -> x,y) |> memoizeN // OK
为什么会出现这种情况,有没有办法使用前者?
这不是因为 lambda,这是一种角落类型推理案例。
F# 类型推断是从左到右进行的,因此在某些情况下,它无法推断出泛型函数的正确类型,除非其参数的类型信息已经被推断出来。
一个更简单的案例可能是这样的:
let x = (fun lst -> lst.Length) [0]