现在已经成为一名势在必行的开发人员,我从未有过学习函数式编程的冲动。
几个月前,我终于决定学习Haskell。这是一个非常酷的语言,但我很困惑如何用这种语言编写一个事件驱动的真实应用程序。你知道一个关于它的好教程吗?
注意:当我说“真正的应用”时,我不是在谈论现实世界,生产就绪的应用。我只是说一个小样本应用程序,只是为了掌握它。我认为像windows caculator的简化版本会很棒,然后可能会有点复杂。
答案 0 :(得分:89)
当你说“真实世界”的例子时,你可能会想到本质上是顺序或有状态的问题,或者做很多I / O,对吗?
那么,游戏怎么样?
或者,X Window Manager,可扩展Emacs clone text editor或IDE呢?
然后,有一本书,甚至标题中已经有您的问题:Real World Haskell 和,这也是available for free!
您可能想要关注的另一件事是Functional Reactive Programming。 (例如,它在Frag中使用。)FRP的有趣之处在于它允许您从一个非常不同的角度来看待GUI编程的问题。如果您阅读RWH书中的GUI章节,您将看到它讨论了如何编写GUI应用程序,就像在C中一样,只是更好。 FRP OTOH允许您以完全不同的方式编写它,在C语言中甚至不可能。
很多时候(我不是说你的问题就是这种情况,但这是一种反复出现的模式)当有人说“但是Haskell可以在现实世界中使用”时,他们是什么真的说的是“我知道如何在C中做到这一点,而在Haskell中我不能以完全相同的方式做到这一点,因此在Haskell中一定不可能,因此Haskell还没有为现实世界做好准备”。但他们错过的是,可能存在完全不同的更好的方法来解决问题。 (这就像说“Erlang没有线程,因此它不可能用于实现并发系统。”)而FRP只是一个例子。
答案 1 :(得分:8)
对于lightning talk今天我已经汇总了这个展示案例Haskell应用程序列表,故意排除任何仅针对程序员的内容:
(还有featured on my blog,以及slides of the talk,每张节目都有精美的代表性照片。)
答案 2 :(得分:7)
xmonad是事件驱动的(字面意思)。它有一个侦听器循环,可以唤醒事件,修改建模X服务器的内部状态,然后渲染到屏幕上。
答案 3 :(得分:6)
我曾经发现这个用haskell编写的irc机器人:
答案 4 :(得分:6)
以下是您要求的部分链接。
这个解释了许多对Haskell的命令式程序员没有“意义”的事情
Haskell Tutorial for C Programmers
这是一个非常好的易于学习的教程
Learn You a Haskell for Great Good
用Haskell编写的光线跟踪器
您可以从这里下载Glasgow Haskell Compiler。 GHC
答案 5 :(得分:4)
你应该看看Real World Haskell。这本书是免费提供的,展示了Haskell如何应用于现实世界的问题。我不会把它称为教程,因为它更全面。
答案 6 :(得分:2)