真实世界的Haskell编程

多年来一直是一个必要的开发人员,我从来没有学过函数式编程的冲动。

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

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


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

那么,游戏呢?

  • Frag是一个地震克隆,用于本科生论文(函数编程和3D游戏,Mun Hon Cheong,2005)。 这是一个动作视频。
  • Super Monao Bros.(以前称为Super Nario Bros.)就是你可以弄清楚它是哪一款游戏的克隆。 (这是作者的英文博客。)
  • Purely Functional Retrogames是一个由4部分组成的关于如何以纯功能语言编写游戏的博客文章,以Pacman为例进行解释。 (第2部分,第3部分,第4部分)
  • 或者,X Window Manager,可扩展的Emacs克隆文本编辑器或IDE呢?

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

    你可能想要看的另一件事是功能反应式编程。 (例如,它在Frag中使用。)关于FRP的一个有趣的事情是它允许您从一个非常不同的角度来看待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):着名的平铺窗口管理器,拥有一个巨大的布局库和其他插件。 尽管它的配置文件是一个Haskell文件,但它已经进入了列表。
  • (自2007年起,9000 loc):基于文本文件的双分类账会计工具,是分类账的克隆。
  • 雨蛙(自2008年,2000年):平台游戏与猫不想弄湿。
  • arbtt(自2009,2000 loc):我的基于规则的自动时间跟踪器。 把它作为无耻的插件列入清单; 可能不那么受欢迎。 它现在有一个由Waldir Pimenta贡献的适当的网页。
  • detexify(自2010年起,500个loc):非常有用的LaTeX字符命令查找器的后端是用Haskell编写的。
  • git-annex(自2010年起,28000 loc):管理您的文件及其位置,Dropbox和Git的混合体。 由着名的乔伊赫斯写的,谁通过kickstarter靠它谋生他目前正在进行第二轮融资!
  • Nikki和机器人(自2010年以来,18000 loc):与Nikki和他的机器人的平台游戏。 它是作为一个商业独立游戏生产的,并通过一种类似付费方式出售,但该公司不幸关闭。
  • hoodle(自2011年起,13000 loc):xournal等笔记和PDF注释软件。
  • Chordify(自2012年起,?loc):分析例如来自YouTube视频的音乐,并计算相应的吉他和弦。 封闭的软件,但据说是用Haskell编写的。
  • (还在我的博客和演讲的幻灯片上,以及每个节目的优秀代表性图片。)


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

    http://xmonad.org

    链接地址: http://www.djcxy.com/p/42937.html

    上一篇: Real world Haskell programming

    下一篇: What does the exclamation mark mean in a Haskell declaration?