真实世界的Haskell编程

时间:2009-07-11 08:14:42

标签: haskell functional-programming

现在已经成为一名势在必行的开发人员,我从未有过学习函数式编程的冲动。

几个月前,我终于决定学习Haskell。这是一个非常酷的语言,但我很困惑如何用这种语言编写一个事件驱动的真实应用程序。你知道一个关于它的好教程吗?

注意:当我说“真正的应用”时,我不是在谈论现实世界,生产就绪的应用。我只是说一个小样本应用程序,只是为了掌握它。我认为像windows caculator的简化版本会很棒,然后可能会有点复杂。

7 个答案:

答案 0 :(得分:89)

当你说“真实世界”的例子时,你可能会想到本质上是顺序或有状态的问题,或者做很多I / O,对吗?

那么,游戏怎么样?

或者,X Window Manager,可扩展Emacs clone text editorIDE呢?

然后,有一本书,甚至标题中已经有您的问题: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应用程序列表,故意排除任何仅针对程序员的内容:

  • darcs(自2002年起,35 000 loc):分布式 版本控制系统,创新地专注于变化 国家。
  • xmonad(自2007年以来,30000 loc):众所周知 平铺窗口管理器与一个巨大的布局库和其他 插件。尽管它的配置文件存在,但它已进入列表 一个Haskell文件。
  • hledger(自2007年以来,9000 loc):文本文件 基于双重分类账的会计工具,是 ledger
  • Raincat(自2008年起,2000年loc): 与猫不想弄湿的平台游戏。
  • arbtt(自2009年以来,2000年):我的 基于规则的自动时间跟踪器。作为一个列表进入列表 无耻的插头;可能不那么受欢迎。它现在有一个合适的网络 页面由Waldir Pimenta提供。
  • detexify(自2010年以来,500位):The 非常有用的LaTeX字符命令查找器的后端是 用Haskell写的。
  • git-annex(自2010年起,28 000人 loc):管理您的文件及其位置,是Dropbox的混合体 和git。由着名的Joey Hess撰写,他以此为生 kickstarter 他目前正在运行second round of funding
  • Nikki and the Robots(自2010年起,18 000人 loc):和Nikki以及他的机器人一起进行平台游戏。它是 作为商业独立游戏制作并通过销售 付出你喜欢的计划,但该公司不幸倒闭了。
  • hoodle(自2011年起,13 000 loc):A 笔记和PDF注释软件 xournal
  • Chordify(自2012年以来,?loc):分析 音乐,例如来自YouTube视频,并计算相应的 吉他和弦。封闭的软件,但据说是用Haskell编写的。

(还有featured on my blog,以及slides of the talk,每张节目都有精美的代表性照片。)

答案 2 :(得分:7)

xmonad是事件驱动的(字面意思)。它有一个侦听器循环,可以唤醒事件,修改建模X服务器的内部状态,然后渲染到屏幕上。

http://xmonad.org

答案 3 :(得分:6)

我曾经发现这个用haskell编写的irc机器人:

http://www.haskell.org/haskellwiki/Roll_your_own_IRC_bot

答案 4 :(得分:6)

以下是您要求的部分链接。

这个解释了许多对Haskell的命令式程序员没有“意义”的事情

Haskell Tutorial for C Programmers

这是一个非常好的易于学习的教程

Learn You a Haskell for Great Good

用Haskell编写的光线跟踪器

Haskell Raytracer

您可以从这里下载Glasgow Haskell Compiler。 GHC

答案 5 :(得分:4)

你应该看看Real World Haskell。这本书是免费提供的,展示了Haskell如何应用于现实世界的问题。我不会把它称为教程,因为它更全面。

答案 6 :(得分:2)