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