真实世界的Haskell编程

rav*_*ven 48 haskell functional-programming

几年来我一直是一位势在必行的开发人员,我从未有过学习函数式编程的冲动.

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

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

Jör*_*tag 89

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

那么,游戏怎么样?

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

然后,有一本书,甚至标题中已经有你的问题:真实世界Haskell ,可以免费获得!

您可能想要了解的另一件事是功能反应式编程.(例如,它在Frag中使用.)FRP的有趣之处在于它允许您从一个非常不同的角度来看待GUI编程的问题.如果您阅读RWH书中的GUI章节,您将看到它谈论如何编写GUI应用程序,就像在C中一样,只是更好.FRP OTOH允许您以完全不同的方式编写它,这在C中是不可能的.

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

  • 确切地说,我自己有游戏的事件(我曾经读过一些大学的论文,建议用一个简单的游戏教学生现实世界的Haskell,但它没有太多的信息).我已经知道我不能像C一样做事,我也知道这些事情可以在Haskell中完成(只是以另一种方式),但是没有线索.这主要是我回答的原因.非常感谢大家,伙计们,你们真的很有帮助. (2认同)

Joa*_*ner 8

对于今天的闪电话题,我已经汇总了这个展示案例Haskell应用程序列表,故意排除任何只针对程序员的东西:

  • darcs(自2002年以来,35 000 loc):分布式版本控制系统,创新专注于变化而不是状态.
  • xmonad(自2007年以来,30000 loc):众所周知的平铺窗口管理器,具有庞大的布局库和其他插件.尽管其配置文件是Haskell文件,但仍将其列入列表.
  • hledger(自2007年以来,9000 loc):基于文本文件的双分类帐会计工具,是分类帐的克隆 .
  • Raincat(自2008年起,2000年左右):平台游戏与猫不想被淋湿.
  • arbtt(自2009,2000 loc):我的基于规则的自动时间跟踪器.作为一个无耻的插头进入列表; 可能不那么受欢迎.它现在有一个由Waldir Pimenta贡献的合适网页.
  • detexify(自2010年起,500 loc):非常有用的LaTeX字符命令查找器的后端是用Haskell编写的.
  • git-annex(自2010年起,28 000 loc):管理您的文件及其位置,dropbox和git的混合.由着名的Joey Hess撰写,他通过kickstarter谋生, 他目前正在进行第二轮融资!
  • Nikki和机器人(自2010年以来,18 000 loc):与Nikki以及他的机器人的平台游戏.它是作为商业独立游戏制作的,并通过付费你喜欢的方案出售,但该公司不幸倒闭了.
  • hoodle(自2011年起,13000 loc):笔记和PDF注释软件,如 xournal.
  • Chordify(自2012年起,?loc):分析音乐,例如来自YouTube视频,并计算相应的吉他和弦.封闭的软件,但据说是用Haskell编写的.

(还在我的博客上,以及演讲幻灯片上,以及每个节目的精美代表性图片.)


Don*_*art 7

xmonad是事件驱动的(字面意思).它有一个侦听器循环,唤醒事件,修改建模X服务器的内部状态,然后呈现给屏幕.

http://xmonad.org


Mer*_*ste 6

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

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


Ind*_*000 6

以下是您要求的一些链接.

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

C程序员的Haskell教程

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

了解一下Haskell的好消息

用Haskell编写的Raytracer

Haskell Raytracer

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