-
Notifications
You must be signed in to change notification settings - Fork 21
Learn You a Haskell for Great Good
- External Link
- Official Site: Learn You a Haskell for Great Good
- Douban Books: Learn You a Haskell for Great Good
- 中译本: Haskell趣学指南
- Ranking: ★★★★
- Hardness: ★★★
- Tag: haskell, type, type class, monad, comics
- Reviews:
说Haskell很难的人大有人在,我在这里也不会在多重复。
我想说的是,Haskell难很大程度在于它的无限可能性,和几乎无穷无尽的学习曲线。
它的学习曲线虽然长,但绝对不是陡峭万分无法攀登的,Learn you a Haskell这本书(以下简称LYAH),就是想说明这点: Haskell不仅是可以被初学者学习的,而且学习的过程还可以很有趣。
我最开始看LYAH的时候作者Miran Lipovaca还没有完成它,不过每写一章都会放在网站上。所以这里也仅仅是原版的读后感,中译本去年出了,我也不太清楚翻译质量。
当时似乎流行起来一股编程书漫画风,包括LYAH,Land of Lisp, 后来出现的Learn you some Erlang等等,都用了大量的漫画来让本来被认为是枯燥的编程书籍变的有趣。
这里不对书中的漫画做什么评价--我个人认为他们是相当有趣的。对于一个喜爱数学游戏的人而言,我相信Haskell本身就已经足够有趣了。作者在书中也是想要表明这样一种观点和姿态。和Real World Haskell不一样,这本书完全不是站在一个实用主义者的立场上 -- 如果你想要快速Haskell上手写个GUI,做个网站 -- 请到别处去。不过如果你想理解基本的Haskell概念: 类型,函数,如何用高阶函数组织你的运算,如何实现函数的多态(type class),甚至如何用类型来构造强大的运算模型(Monad, Zipper),这本书绝对是一个适合的起点。这个角度来说,我个人觉得它完全适合作为第一本Haskell读物,甚至第一本函数式编程读物或者第一本编程读物。
书的前十章,基本上都是比较容易的内容,作者以大量的例子,介绍了Haskell的基本语法。边读边在GHCi中试验各种例子,会给你一种GHCi是一个无比强大的计算器的感觉。书中虽然没有习题,不过这部分的内容完全足以支持你用Haskell去Project Euler上挑战各种各样的数学难题,它们也是相当好的脑力练习题。
最后四章,作者开始介绍一些作为运算模型的type class,也是一些有着吓人名字的东西: Functor, Applicative, 特别是Monad。Monad本身,已经在无数个博客、论文、论坛讨论被说烂,某种意义上被莫名其妙的神化了。LYAH这本书引入Monad的角度也是我觉得最好的一个角度,即让读者自己在一些重复的例子中发现这样一种运算的模式,作者再将这种模式抽象为Monad。个人拙见是,从这个角度理解的Monad,本质上和高阶函数是一样的意思。作者紧接着立刻介绍了最常用的三个Monad: Reader, Writer, State,并在这个过程中引入了Monoid等。每个Monad都是以例子来讲解,让读者真正去用,而不是停留在“试图理解”Monad止步不前。-- 作者传达了这样一种信息,与其会说Monad是这个是那个,不如会用Monad来做点事情。我认为这也是一个高明的姿态:我们已经见过太多太多试图说Monad是什么的文字了。
最后一章讲Zipper,也是个挺有意思的选择。我没有实用它的经历,留待其他人来补充好了。
总而言之,如果你喜欢数学,喜欢编程,听别人说Haskell怎么怎么样有点心痒痒,看这本书就对了。这本书看完,还想要更多?相信你能找到自己的路了--我也正在这条路上。
haskell的书不太多,像本书这样轻口味的更少。
正如本书开篇提到的。
Work on Haskell began in 1987 when a committee of researchers got together to design a kick-ass language.
[最初的工作始于 1987 年,一群学者聚在一起想设计一个吊到爆的编程语言]。
haskell设计的目的就是把你搞晕,总有重口味爱好者的。
这不是嘛,爱好数学的人们,看到这个语言,喜欢的不得了。
随着一阵阵眩晕和颤抖,得到了他们需要的快感。
本书则不同,以平淡的文字,描述着一件件惊天动地的事情。
这就是本书的魅力所在了吧,换一换风格,会有新的认识。
首先,目录是用缩进形式写的,haskell style啊。
后来发现,haskell erlang python,不知道怎么的互相影响。
列表解析呀,模式匹配啊,后来连go也同流合污了。
理解以后才明白,原来这就是函数式风格呀。
身为血统最纯正的函数式语言,haskell是一个贵族。
硬生生的用monad把世界分成两半了。
有副作用的,没有副作用的。
如果你从其他书中觉得monad难以理解,本书可以为你解惑。
正如其他概念functor, applicative一样,monad也是提炼出来的。
你发现很多函数互相调用,有套路可循。
可以将套路抽象出来,做一个运算控制器。
那么它很可能就是functor, applicative或者monad了。
只不过加上类型以后,把你搞晕了而已。
但是,也不能高兴的太早,对运算模式的抽象和对数据的抽象。
haskell走的很远。
其他语言因为缺乏原生机制来支持,所以往往不够精炼。
所以,学习haskell能让你拥有先进的思维方式。
在任何其他语言中,都可以写出不一般的代码。
很简单,你先实现一个运算控制器,然后当做类库使用就行了。
另外,本书monad和monoid看起来很像,其实是不同的概念。
我看了好几遍才发现,这居然是两个不同的单词。
只能怪自己对字母不敏感了。
总之,本书乐趣十足,是居家旅行必备图书。