我已经是一名命令式开发者好几年了,但从未有过学习函数式编程的冲动。
几个月前,我最终决定学习Haskell。这是一种很酷的语言,但我对如何在这样的语言中编写事件驱动的真实应用程序感到困惑。你知道有关此类主题的好教程吗?
注意:当我说“真实应用程序”时,并不是指一个实际的、生产就绪的应用程序。我只是想要一个小的示例应用程序,以便更好地理解它。我认为类似于简化版的Windows计算器会很棒,然后再尝试编写一些更复杂的内容。
我已经是一名命令式开发者好几年了,但从未有过学习函数式编程的冲动。
几个月前,我最终决定学习Haskell。这是一种很酷的语言,但我对如何在这样的语言中编写事件驱动的真实应用程序感到困惑。你知道有关此类主题的好教程吗?
注意:当我说“真实应用程序”时,并不是指一个实际的、生产就绪的应用程序。我只是想要一个小的示例应用程序,以便更好地理解它。我认为类似于简化版的Windows计算器会很棒,然后再尝试编写一些更复杂的内容。
当你说“实际应用”时,你可能想到的是那些本质上是顺序的、状态相关的或需要大量I/O操作的问题,对吗?
那么,游戏怎么样呢?
那么,您想尝试一下 X 窗口管理器、可扩展的 Emacs 克隆文本编辑器或者是一个IDE呢?
此外,还有这本书,它的标题中已经包含了您的问题:Real World Haskell,而且这本书可以免费获取!
另外一个您可能会感兴趣的东西是 函数响应式编程。(例如,在 Frag 中使用了它。)FRP 的有趣之处在于,它允许您从完全不同的角度来看待诸如 GUI 编程之类的问题。如果您阅读 RWH 书中的 GUI 章节,您会发现它讲述的是如何像在 C 中编写 GUI 应用程序一样编写,只不过更好。而 FRP 则允许您以一种完全不同的方式来编写,这在 C 中甚至都不可能。
很多时候(我并不是说您的问题就是这种情况,但这是一个经常出现的模式),当有人说“但是 Haskell 能在实际中使用吗”时,他们实际上想表达的是“我知道如何在 C 中做到这一点,在 Haskell 中我无法以完全相同的方式做到,因此在 Haskell 中必定不可能完成,因此 Haskell 还没有准备好进入实际应用领域”。但他们忽略了这样一点,即可能有一种完全不同而且更好的解决问题的方法。(这就像说“Erlang 没有线程,因此它不可能用于实现并发系统。”)而 FRP 就是其中的一个例子。
我曾经发现过这个用Haskell编写的IRC机器人:
以下是您所要求的一些链接。
这个链接解释了很多关于Haskell对命令式程序员来说不那么“合理”的东西。
这个链接是一个非常好的易于理解的教程。
Haskell编写的光线追踪器
您可以从这里下载Glasgow Haskell Compiler。 GHC