我试图理解如何使用函数式编程来实现通常使用OO /命令式方法实现的应用程序。
一个重要的应用程序类别是编辑器(Word,Evernote,PowerPoint,Photoshop等)。
让我们将GoF的Lexi编辑器应用程序视为代表性和众所周知的示例,其中面向对象/命令式解决方案已在GoF书中详细描述。
如何在Haskell中编写相当于GoF的Lexi应用程序?
这有可能吗?在OO /命令式与FP /不可变方法中,时间/内存复杂度如何比较?
在Haskell中实现该应用程序(Lexi)的一般架构会是什么?
与GoF书中描述的非功能性/面向对象解决方案相比,它会更好还是更差?
感谢阅读。
编辑/答案:
这本书' 哈斯克尔表达学校'似乎回答了这个问题。它显示了(除其他事项外)如何在Haskell中开发图形编辑器。
编辑2:This演示似乎也回答了这个问题(不是直接)。
答案 0 :(得分:7)
我会解决你的一个客观答案的问题:
是否可以[在Haskell中编写相当于GoF的Lexi应用程序]?在OO /命令式与FP /不可变方法中,时间/内存复杂度如何比较?
是的,这是可能的。如果您承认像ST monad这样简单的事情,那么与“OO /不完全方法”相比,Haskell中没有固有的时间/内存复杂性约束。没有ST monad,它是open problem whether purely functional languages with lazy evaluation can achieve the same time performance as mutable languages。它们肯定在log(M)
的时间性能因子中,其中M
是可变系统中使用的内存量;通过从树中构建可变内存系统可以很容易地看出这一点。