在研究与编程相关的主题时,我遇到了 pointfree lambdabot 中的 Haskell 重构工具,想知道 F# 是否可以重构为无点样式?
我不是提倡使用pointfree风格,而是将其视为更好地理解函数的一种手段。
注:pad回答了这个问题的早期版本,但我改写了这个问题,因为这个答案对其他人学习和使用 F# 很有值(value),我不希望由于一些接近投票而将其删除。
注意:仅仅因为我更改了问题,不要认为答案意味着不能使用 F# 以点自由样式进行编码。它可以在许多情况下完成,但您必须遵守一些限制。
最佳答案
简答
不。
长答案
F# 中有一些事情使这样的工具不切实际。 (1) 由于 .NET 互操作,F# 代码经常有副作用,当副作用发挥作用时,自动代码转换变得非常困难。 Haskell 不是这种情况。 Haskell 中的等式推理要容易得多,您可以用右手边重写左手边,而无需更改它们的评估。 (2) F#中的无点编程受限于value restriction .我不确定您是否可以在不遇到此问题的情况下积极进行代码转换。
我认为假设 F# 代码是纯代码并且在特定情况下不会发生值限制更为实际,以便我们可以给用户一些提示。在评估建议实际上是正确的之后,用户可以离散地应用建议。更接近HLint方法比你提到的那个。 FSharpLint在这个方向上添加了一些 linting 规则。
关于f# - F#可以重构为pointfree风格吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24890026/