GoF的Lexi Editor应用程序的功能实现(例如在Haskell中)

时间:2014-03-12 21:42:25

标签: oop haskell functional-programming design-patterns

我试图理解如何使用函数式编程来实现通常使用OO /命令式方法实现的应用程序。

一个重要的应用程序类别是编辑器(Word,Evernote,PowerPoint,Photoshop等)。

让我们将GoF的Lexi编辑器应用程序视为代表性和众所周知的示例,其中面向对象/命令式解决方案已在GoF书中详细描述。

如何在Haskell中编写相当于GoF的Lexi应用程序?

这有可能吗?在OO /命令式与FP /不可变方法中,时间/内存复杂度如何比较?

在Haskell中实现该应用程序(Lexi)的一般架构会是什么?

与GoF书中描述的非功能性/面向对象解决方案相比,它会更好还是更差?

感谢阅读。

编辑/答案:

这本书' 哈斯克尔表达学校'似乎回答了这个问题。它显示了(除其他事项外)如何在Haskell中开发图形编辑器。

编辑2:This演示似乎也回答了这个问题(不是直接)。

1 个答案:

答案 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是可变系统中使用的内存量;通过从树中构建可变内存系统可以很容易地看出这一点。