真实世界的Haskell编程

多年来一直是命令式的开发者,我从来没有学过函数式编程的冲动。

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

注意:当我说“真正的应用程序”,我不是说真实的世界,生产准备的应用程序。 我只是指一个小样本应用程序,只是为了掌握它。 我认为像Windows caculator的简化版本会很好,然后可能会更复杂一些。

当你说“现实世界”的例子时,你大概会想到本质上是连续的或有状态的问题,或者做很多I / O,对吗?

那么,游戏呢?

  • Frag是一个地震克隆,用于本科生论文( 函数编程和3D游戏,Mun Hon Cheong,2005 )。 这里是一个在行动的video 。
  • 超Monao兄弟 (以前称为超级Nario兄弟 )是,那么,你可以大概找出它是一个克隆的游戏。 ( 这是作者的英文博客。 )
  • Purely Functional Retrogames是一个由四部分组成的关于如何用纯function语言编写游戏的博客文章,以Pacman为例进行解释。 ( 第2部分 , 第3 部分 , 第4部分 )

或者, X Window Manager ,可扩展的Emacs克隆文本编辑器或IDE呢?

然后,这本书,甚至有你的问题已经在标题: 真实世界Haskell 也是免费的 !

另一件你可能想要看的是function反应式编程 。 (例如,在Frag中使用它)关于FRP的一个有趣的事情是它允许你从一个非常不同的angular度来看待GUI编程的问题。 如果你阅读RWH书中的GUI章节,你会看到它谈到了如何像在C中一样编写GUI应用程序,只是更好。 FRP OTOH允许你用完全不同的方式写出来,这在C中是不可能的。

当有人说“但现实世界中可以使用Haskell”时,很多时候(我不是说你的问题就是这种情况,但它是反复出现的模式),他们真正说的是“我知道如何在C和Haskell中做到这一点,我不能以完全相同的方式做到这一点,因此在Haskell中是不可能的,因此Haskell没有为现实世界做好准备。 但是,他们错过的是,可能有一个完全不同的, 更好的方法来解决这个问题。 (这就好像在说“Erlang没有线程,因此不可能用来实现并发系统”)而FRP就是一个例子。

对于今天的闪电讲话 ,我已经汇集了这个Haskell应用程序的列表,故意排除只针对程序员的任何事情:

  • darcs (自2002年以来,35 000 loc):分布式版本控制系统,创新性地关注变化而不是状态。
  • xmonad (自2007年以来,30000 loc):众所周知的平铺窗口pipe理器,拥有一个庞大的布局库和其他插件。 尽pipe它的configuration文件是一个Haskell文件,但它已成为列表。
  • (自2007年起,9000 loc):基于文本文件的双分类帐核算工具,是一个分类账的克隆。
  • 雨蛙 (自2008年,2000年):与不想被弄湿的猫的平台游戏。
  • arbtt (自2009,2000 loc):我的基于规则的自动时间跟踪器。 把它作为无耻的插件列入清单; 可能不那么受欢迎。 它现在有一个由Waldir Pimenta贡献的适当的网页。
  • detexify (自2010年起,500个loc):非常有用的LaTeX字符命令查找器的后端是用Haskell编写的。
  • git-annex (自2010年以来,28000 loc):pipe理你的文件及其位置,Dropbox和Git的混合。 由着名的乔伊·赫斯(Joey Hess)写的,他通过kickstarter靠它谋生,目前正在进行第二轮的资助 !
  • Nikki和机器人 (自2010年以来,18000 loc):与Nikki和他的机器人的平台游戏。 它是作为一个商业独立游戏生产的,并通过一种类似于付费的方式进行销售,但公司不幸倒闭。
  • hoodle (自2011年以来,13000 loc):一个笔记和PDF注释软件,如xournal 。
  • 和弦 (自2012年起,?loc):分析音乐,例如YouTubevideo,并计算相应的吉他和弦。 封闭的软件,但据说写在Haskell。

(也在我的博客 ,以及谈话的幻灯片上 ,每个程序都有很好的代表性图片。)

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

http://xmonad.org

我曾经发现用haskell编写的这个irc bot:

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

以下是您所要求的一些链接。

这个解释了很多对Haskell来说,一个命令程序员没有任何意义的东西

Haskell C程序员教程

这是一个非常好的易于遵循教程

学习你一个好的Haskell

在Haskell写的光线追踪器

哈斯克尔光线追踪器

你可以从这里下载Glasgow Haskell编译器。 GHC

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

检查function反应式编程 。