我正在学习 F#。我来这里是因为我对价值限制有一些难以理解的事情。
\n\n以下是我正在学习的书中的示例。
\n\nlet mapFirst = List.map fst\nRun Code Online (Sandbox Code Playgroud)\n\n由于我用 haskell 学习了 FP,所以我非常确定这段代码可以很好地编译,但事实并非如此。结果出现错误FS0030(抱歉,我无法复制粘贴 fsi 错误消息,因为它是用韩语编写的)。相反,我必须提供一个明确的论点,例如:
let mapFirst inp = List.map fst inp // or inp |> List.map fst\nRun Code Online (Sandbox Code Playgroud)\n\n但为什么?我认为通过上面的例子,编译器肯定可以推断出给定值的类型:
\n\nlet mapFirst inp = List.map fst inp // or inp |> List.map fst\nRun Code Online (Sandbox Code Playgroud)\n\n如果我没记错的话,我在 haskell 中调用了这个东西eta-conversion,上面两个例子是完全相同的。(但也许不完全是)。为什么我应该显式地向可以柯里化的函数提供参数而不丢失任何信息?
\n\n我明白了类似的事情
\n\nval mapFirst : (\'a * \'b) list -> \'a list\nRun Code Online (Sandbox Code Playgroud)\n\n不会编译,为什么,但我不认为它与我的问题有关。
\n\n\xe2\x80\xbb 我看了一下这个问题,但没有帮助。
\nf# ×1