从未有过一门编程语言像Haskell这般打动我:

Elegance is not optional. 
优雅是不可或缺的。

—— Richard O’Keef

以致我打算写一本关于编程的书,计划主题涉及Haskell、范畴论以及如何使用它们解决实际的编程问题。此外,写作本书的原因还有:

 Haskell的进化速度太快,关于Haskell的资料多少都有些过时了,例如著名的RWH、LYAH,很多东西都已经不适用;

 国内关于Haskell的资料太少;

 范畴论是程序员解决问题的有力工具,可是很多关于范畴论的文章都太过学术;

 Haskell是一门十分有趣、有用的语言,了解的人太少实在可惜。

综上,这本书力图能够给喜欢编程的读者带去很多有趣、有用的东西,让读者在工作中享受Haskell和范畴论的美妙。

书名一方面来源于:

Any sufficiently advanced technology is indistinguishable from magic.
先进的科技无异于魔法。

——Arthur C. Clarke

另一方面是因为熟悉Haskell的人都承认它是一门充满了魔法咒语的语言。另外,我很喜欢电影《魔力麦克》。

本书分为三部分:基础知识、重要的类型和类型类、高级类型类和项目实践,是一门由浅入深的Haskell教程。

第一部分主要介绍Haskell的基础语法和函数式编程的基本概念,以及GHC、GHCi、cabal等工具的用法。

第二部分按照函子→应用函子→单子的顺序介绍Haskell中核心的三大类型类,并以列表单子、Reader单子和State单子为例详细分析单子类型类的来龙去脉。

最后一部分主要介绍最新加入Haskell的Foldable和Traversable类型类、单子变换、GHC的语言扩展和程序标注,以及在网络编程、数据库、并发和并行等方面的一些实例,希望能给读者带去很多有用的参考。

因此,本书面向的读者面也较为广泛,不管你是刚刚开始学习编程的计算机爱好者,或是有一定编程经验的从业人员,还是对函数式编程已经有了一些了解但希望进一步提高的进阶读者,我相信在本书中都能找到你想要的内容。不过这里需要提醒的是,很多拥有其他语言经验的程序员在刚刚学习一门新语言时,往往喜欢从案例入手,粗略看了几眼基本语法后就直接进入自己熟悉的领域,分析案例,例如十分钟写出一个Web Server,半小时写出一个GUI记事本等,然后根据之前自己的经验来消化新语言的语义和使用技巧。因为以他们以往的经验来看,不同的语言无非就是缩进和括号这类细枝末节的语法不同,或者某些特性支持与不支持的区别。但我强烈建议学习Haskell的时候,把之前的语言经验统统忘记,因为这是一门非常“不一样”的语言。

 Haskell是纯函数式编程语言,所有的函数只要传递的参数相同,计算的结果也一定相同,即使是和外界产生交互的函数,例如读取用户输入getLine,我们会为了和外界交互创造一整个世界。

 Haskell没有任何的控制结构声明,例如你所熟知的for和while,但却拥有许多强大的结构控制函数,可以方便地表达复杂的确定性、非确定性、同步、异步等计算过程。

 Haskell没有可以改变的变量,却可以实现非常复杂的状态转换。把State的操作用强类型标记,可以从编译阶段杜绝大量bug。另外,本书将使用“绑定”一词取代其他资料中的变量,以减少歧义。

 Haskell的抽象能力非常强,所以要求你理解很多抽象的概念。但这不是一件坏事,并且当你熟练掌握它们之后,它们可以帮你节省很多无用的代码。而且相比其他语言,你可能会把大部分时间都花在细枝末节的处理上。

人们常常把Haskell和另一门远古魔法Lisp作比较。作为一个出现较晚的函数式编程语言,Haskell从数学界引入了大量强力的概念,这使得它异常严谨,每一个层次的抽象都建立在坚固的理论基础之上。

所以每一个在你看来很简单的概念,都会在之后更加庞大的概念中出现,千万不要因为它们看起来没用而忽略它们,这会导致你快速翻阅到后面章节时,因为错过太多简单的概念而无法理解后续出现的精髓,等到实际应用时,你会觉得Haskell难以使用。

本书会提供很多Haskell的实际应用,因为本人工作的原因,这里提供的应用实例大部分将集中在网络编程方面。也希望读者能够耐心阅读,慢慢体验Haskell的优雅。当你读完本书后,十分钟写出一个Web Server之类的事情将完全不是问题。

此外,本书还提供了源代码供读者下载,详情可参见http://magic-haskell.com/或者图灵社区本书主页http://www.ituring.com.cn/book/1882。

感谢图灵公司,尤其是王军花编辑对我的大力支持,没有你们的努力,本书不可能和读者见面。也感谢在美团所有和我一起共事过的同事,我的两个前端组Leader潘魏增、夏娇娇,之前百度的Leader陆泰宁,没有你们的帮助,本书不可能成稿。特别感谢周围在我写作期间给予的关心和帮助,你是我不断努力的动力。

评论

本文目前还没有评论……

我要评论

需要登录后才能发言
登录未成功,请修改提交。

× 451
× 1756
× 2435
× 934
× 1
× 1
× 1191
× 0
× 1
× 0
× 2
× 1
× 3
× 3
× 2750
× 817
× 1104