设计/构造大型功能程序的好方法是什么,尤其是在Haskell中?
我已经看过很多教程(我最喜欢编写自己的方案,紧随其后的是Real World Haskell)-但是大多数程序相对较小,而且用途单一。另外,我认为其中一些并不特别优雅(例如WYAS中庞大的查找表)。
我现在想编写更大的程序,并且要有更多的活动部分-从各种不同的来源获取数据,对其进行清理,以各种方式对其进行处理,在用户界面中显示它,对其进行持久化,通过网络进行通信等。一种最佳的结构,使代码清晰,可维护并适应不断变化的需求?
有大量的文献针对大型面向对象的命令式程序解决了这些问题。诸如MVC,设计模式之类的想法是实现OO风格的广泛目标(如关注点分离和可重用性)的合适处方。此外,较新的命令式语言使其具有“随您成长而设计”的重构风格,在我新手看来,Haskell似乎不太适合这种风格。
Haskell是否有等效的文献?如何最好地在功能编程(单子,箭头,应用程序等)中使用奇异控制结构的动物园?您可以推荐哪些最佳做法?
谢谢!
编辑(这是唐·斯图尔特的回答的后续内容):
@dons提到:“ Monads以类型捕获关键的架构设计。”
我想我的问题是:如何用一种纯粹的功能语言思考关键的建筑设计?
考虑几个数据流和几个处理步骤的示例。我可以将数据流的模块化解析器编写为一组数据结构,并且可以将每个处理步骤实现为一个纯函数。一条数据所需的处理步骤将取决于其价值和其他价值。在某些步骤之后,应该有副作用,例如GUI更新或数据库查询。
以一种很好的方式绑定数据和解析步骤的“正确”方法是什么?可以编写一个大型函数,对各种数据类型执行正确的操作。或者,可以使用monad跟踪到目前为止已处理的内容,并让每个处理步骤从monad状态中获取下一步所需的内容。或者可以编写很大程度上独立的程序并发送消息(我不太喜欢此选项)。
他链接的幻灯片上有一个“我们需要的东西”项目符号:“将设计映射到类型/函数/类/单子的惯用法”。有哪些成语?:)