F#可以重构为无点样式吗?

时间:2014-07-22 14:24:56

标签: f# pointfree

在研究与编程相关的主题时,我在lambdabot中遇到了Haskell的pointfree重构工具,并想知道F#是否可以重构为无点样式?

我不是主张使用无点样式,而是将其视为更好地理解函数的一种方法。

注意:pad回答了此问题的早期版本,但我重写了这个问题,因为答案对于其他学习和使用F#的人来说是有价值的,我不希望因为一些接近的投票而删除它。

注意:仅仅因为我更改了问题,请不要回答这意味着无法使用F#编写自由点样式。它可以在很多情况下完成,但你必须遵守限制。

1 个答案:

答案 0 :(得分:11)

简短回答

没有

答案很长

F#中有一些东西会使这种工具变得不切实际。 (1)由于.NET互操作,F#代码经常有副作用,当副作用发挥作用时,自动代码转换变得非常困难。 Haskell并非如此;在Haskell中,等式推理更加容易,您可以在不改变评估的情况下用右侧重写左侧。 (2)F#中的无点编程受value restriction的限制。我不确定你是否可以积极地进行代码转换而不会遇到这个问题。

我认为假设F#代码是纯粹的并且在特定情况下不会发生值限制以便我们可以为用户提供一些提示更为实际。在评估建议实际上是正确的之后,用户可以离散地应用建议。它比你所提到的更接近HLint方法。 FSharpLint在这方面增加了一些掉毛规则。