2014-07-22 57 views
7

在研究与编程相关的话题我在lambdabot跨越pointfree重构工具来抓Haskell和在想,如果F#能够被重构到一个pointfree风格?F#可以重构为无点式吗?

我不主张使用pointfree风格,但把它看作是更好地理解功能的一种手段。

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

注意:只是因为我改变了这个问题,不要把答案可以在一个点自由的风格不是代码中使用F#意味着一个。它可以在很多情况下完成,但是您必须遵守一些限制条件。

+0

“问题,要求我们建议或找到一个工具,库或喜爱的异地资源是题外话堆栈溢出,因为他们往往以吸引自以为是的答案和垃圾邮件,而是说明问题,什么迄今已完成解决它。“ –

回答

11

简短的回答

龙答案

有F#中的几件事情,让这样的工具是不切实际的。 (1)由于.NET互操作性,F#代码通常具有副作用,并且当副作用发挥时自动代码转换变得非常困难。 Haskell并非如此;在Haskell中,等式推理要容易得多,您可以在不改变其评估的情况下通过右侧重写左侧。 (2)F#中的无点编程受限于value restriction。我不确定你可以积极地进行代码转换而不会触及这个问题。

我认为这是更实际的假设,F#代码是纯粹的和价值限制不会在特定情况下,使我们可以给用户一些提示出现。用户可以在评估建议实际上正确后离散应用建议。它比您提到的方法更接近HLint方法。 FSharpLint在这个方向上添加了一些linting规则。

+0

感谢您提供有关F#无法实现此类工具的详细信息。在未来需要的情况下,保持隐藏起来是很好的事实。也许有一天我会做出这样的工具,但确定导致价值限制的地方,因此每个人都可以从中学习。 –

+0

您可以识别安全应用自由点,重构语言的一个子集。但是,如果没有像“纯”关键字或“Pure”属性这样的特殊标记,很难确保您保持在安全区域内。 – pad

相关问题