如何在FP应用程序中组织代码?你用什么方式分隔文件,模块,目录等?
答案 0 :(得分:9)
如何构建用函数式语言编写的应用程序?
与任何其他类型的应用程序没有什么不同:
每个模块都隐藏着一个秘密。
可能会改变的设计决策应该封装在一个模块中。
模块可能会导出单个主要类型,几种辅助类型以及一大堆相关操作。
模块的内聚和耦合仍然和Yourdon一样重要,康斯坦丁说它们早在20世纪70年代就已经出现了 - 尽管在函数式语言中你很少需要担心“连续”形式的内聚和耦合。
许多函数式语言每个文件需要一个模块,但ML方言提供了更大的灵活性。然而,压倒性的做法是将模块及其接口放入单独的文件中。目标Caml将此约定纳入其编译器中。
简而言之,表示是编程的本质(Fred Brooks),并且与任何其他大型应用程序一样,您的模块应该被组织以避免无偿地暴露表示。
在函数式语言中有一点不同的是,您可能会提供一个模块,该模块封装了一些执行模式,体现在更高阶的函数中。例如,我写了一个基于Bubble Search的模块;我的代码采用任何贪婪算法并自动将其转换为bubble-searchy算法。但像这样的模块,完全是关于代码而没有真正的数据结构,是非常罕见的。