魔力Haskell
14推荐 收藏
11.5K阅读

魔力Haskell

韩冬 (作者)
上市销售
本书是一本由浅入深的Haskell教程。书中首先介绍Haskell的基础语法和函数式编程的基本概念,以及GHC、GHCi、Cabal等工具的用法;接着按照函子→应用函子→单子的顺序介绍Haskell中核心的三大类型类,并以列表单子、Reader单子和State单子为例详细分析单子类型类的来龙去脉;最后介绍Foldable和Traversable类型类、单子变换、GHC的语言扩展和程序标注,以及网络编程、数据库、并发并行、序列化/反序列化与泛型编程、异常处理等内容。
不管你是刚刚开始学习编程的计算机爱好者,或是有一定编程经验的从业人员,还是对函数式编程已经有一些了解但希望进一步提高的进阶读者,我相信在本书中都能找到你想要的内容。

收藏本书能做什么?

有情况的时候会收到通知,比如电子书发布等。

出版信息

  • 书  名魔力Haskell
  • 执行编辑关于本书的内容有任何问题,请联系 王军花
  • 出版日期2016-09-12
  • 书  号978-7-115-43283-4
  • 定  价79.00 元
  • 页  数364
  • 印刷方式黑白
  • 开  本16开
  • 出版状态上市销售

所属分类

本书特色

前滴滴出行首席架构师、美洽网总裁兼CTO李令辉作序推荐
贴近Haskell前沿,兼顾理论和实践的最佳参考书
揭秘单子变换、模板编程和泛型编程等特性
解答异常处理、网络编程、数据库操作等方面的常见问题

专家评论
对于程序员来说,对照着理论快速实践的图书更容易学习,韩冬同学的《魔力Haskell》就是这样一本读起来轻松愉快、很有亲和力的图书,书中提供了大量实践来配合理论讲解,学习起来没有太大压力。
——李令辉,前滴滴出行首席架构师,现美洽网总裁兼CTO

不要被书的名字欺骗,“魔力”在这本书里就是实实在在的引导,是为了一步一步降低学习Haskell的难度。读完它,你将领略到Haskell魔力下的编程之美。
——陆泰宁,百度资深前端工程师

目录

阅读
前  言 阅读
第一部分 基础知识
第1章 基本语法和GHCi
第2章 data和模式匹配
第3章 列表、递归和盒子比喻
第4章 元组、类型推断和高阶函数
第5章 常用的高阶函数和函数的补充语法
第6章 常用的列表操作:映射、过滤、 折叠和扫描
第7章 类型类
第8章 数字相关的类型类
第9章 type、newtype和惰性求值
第10章 模块语法以及cabal、Haddock 工具
第二部分 重要的类型和类型类
第11章 函子 阅读
第12章 透镜组 阅读
第13章 应用函子
第14章 单位半群和一些有趣的应用函子
第15章 解析器
第16章 单子
第17章 八皇后问题和列表单子
第18章 Reader单子
18.1 (->)a的单子实例声明
第19章 State单子
第20章 IO和它的伙伴们
第三部分 高级类型类和项目实践
第21章 语言扩展和程序标注 
第22章 Foldable和Traversable 
第23章 列表、数组和散列表
第24章 单子变换 
第25章 单子变换的升格操作
第26章 高效字符串处理 
第27章 网络编程 
第28章 Haskell与数据库
第29章 模板编程
第29章 模板编程
第30章 并发和并行编程
第31章 高级类型编程
第32章 序列化/反序列化与泛型编程
第33章 Haskell中的异常处理

作者介绍

韩冬

北京理工大学07级毕业生,毕业后从事嵌入式开发,后投身互联网行业,曾任职百度、美团网高级前端工程师,现在在滴滴出行平台架构组从事架构开发工作。在工作中实践函数式编程,经验丰富。

平时除了在github上维护前端项目之外,还维护一些haskell编写的实用工具 ,倡导使用haskell快速、高效地开发健壮的代码。提倡应用函数式编程的理念,提高软件开发的可维护性。

大家也喜欢

  • Scala程序设计(第2版)

    Dean Wampler   Alex Payne   王渊   陈明   译

    本书全面地介绍Scala这种针对JVM的编程语言,它集成了现代对象模型、函数式编程和先进类型系统的所有优势。本...

  • 函数式编程思维

    Neal Ford   郭晓刚   译

    本书每一章都会给出各种函数式编程思维的示例,并用Java 8或其他具备函数式能力的JVM语言代码实现出来。改变...

  • Scala与Clojure函数式编程模式:Java虚拟机高效编程

    Michael Bevilacqua-Linn   赵震一   译

    本书向读者展示了如何采用函数式方案来替代或最大程度地简化在面向对象编程中所使用的许多常 用模式,同时还介绍了...

  • Scala程序设计:Java虚拟机多核编程实战

    Venkat Subramaniam   郑晔   李剑   译

    推荐: “Venkat以一种易于理解、讲求实效的方式为Java程序员介绍了Scala编程。这本书涵盖了Sca...

相关文章

  • 黄志斌 7推荐

    八皇后问题

    问题 《魔力 Haskell》第 17.2 节提到: 八皇后问题最早由棋手马克斯·贝瑟尔于 1848 年提出。之后,陆续有数学家对其进行研究,其中包括高斯和康托,并将其推广为更一般的 n 皇后摆放问题。 八皇后问题是一个以国际象棋为背景的问题:如何能够在 8×8 的国际…...

  • winterland 7推荐

    《魔力Haskell》补充视频教程

    在出版了《魔力Haskell》之后,我在滴滴组织了滴滴FP交流群,并开始了推广Haskell的课程,一到两周更新一期。目前已经录制的视频可以在这里收看: haskell系列教程1 @ 滴滴FP 基础语法-模式匹配-STG执行模型 [haskell系列教程2 @滴滴FP 函数…...

  • 黄志斌 9推荐

    《魔力Haskell》索引

    前段时间在读《魔力Haskell》,已经读到 220 页,读完前 21 章。期间提交了不少勘误,同时还手工编写了一个索引。近期都没空继续读这本书。所以先将我整理的索引公布如下,仅供参考。 Update 2017-01-09: 已经完成索引。 ! 212-214,238 !!…...

  • 黄志斌 3推荐

    500. 第500题!!!

    题目 Problem 500. Problem 500!!! The number of divisors of 120 is 16. In fact 120 is the smallest number having 16 divisors. Find the sma…...

  • 梦飞 推荐

    第一章:基本语法和GHCi

    1.代码注释 --单行注释 {- 一段注释 -} 2.表达式:有值(value)的式子,例如: 1, x+3, True, sort [2,4,6,1] 3.声明:一个完整的Haskell程序由若干声明组成 类型声明:Haslell是一门强类型语言,所有表达式…...

  • 梦飞 2推荐

    第三章:列表、递归和盒子比喻

    列表是Haskell中非常重要的数据结构,理解列表,是理解Haskell控制结构的第一步. 1.列表:[ ]包围在参数外层的一个特殊构造语法 data [a] = a : [a] | [] --[1,2,3]== 1 : 2 : 3 : [] : 是一个中缀构造函数 …...

  • 梦飞 推荐

    第四章:元组、类型推断和高级函数

    1.元组(): 元组不算是Haskell中用得最多的数据结构,因为我们可以自定义数据类型来达到更好的效果,但元组捕捉了乘积类型(Product)的本质:多元组的类型取决于组成元组的每个类型,总的类型个数等于每个元素的类型个数乘积。定义如下 data () = () dat…...

  • 梦飞 推荐

    第五章:常用的高阶函数和函数的补充语法

    1.应用函数$和& $和&函数的作用在于把左边和右边的表达式都加上括号,他们的应用在于它的优先级较低,因此可以简化写出极简却又复杂的代码,应该注意的是$是右结合的,&是左结合的。 ($) :: (a -> b) -> a -> b …...

  • 梦飞 推荐

    第六章:常用的列表操作

    列表的定义限定了列表中的类型一定都是相同的。 1.映射 把从a到b的函数映射成了从[a]到[b]的函数,这个函数保留了元素的一一对应关系。 map :: (a -> b) ->[a] -> [b] map _ [] = [] map f (x:xs) =…...

  • 梦飞 推荐

    第七章:类型类

    类型类typeclass是Haskell中最出名的魔法之一。类型推断系统System FC with roles。 类型类的实现包括类型声明和实例声明两部分。 1.实例声明 instance declaration 在第二章data时的例子中 data Position…...

  • 梦飞 1推荐

    第八章:数字相关的类型类

    Haskell中基本的判断大小、数值运算等都不是语法结构,而是通过函数实现的,本章介绍与之相关的类型类和常用的函数。 data和类型约束:永远不要在你的数据类型声明前加上类型类的约束。类型约束应该应该用来约束普通函数的参数类型,进而帮助编译器确定函数的行为,而不是约束数据的行…...

  • 梦飞 推荐

    第九章:type、newtype和惰性求值

    1.类型别名 type 和data不同,type是一个轻量型的语法,它仅仅是给已经存在的类型提供了一个不一样的名字,不会定义新的构造函数 在类型检查时,这个“新”的数据类型和type指代的类型完全等价,编译器不会区别 type类型别名声明常常用语简化类型的书写 type …...

  • 梦飞 推荐

    第十章:模块语法及cabal、Haddock工具

    本章主要介绍如何书写、管理和注释程序模块。 1.模块语法 模块:值、类型、类型别名、类型类等的集合 在模块内部,通过import可以把其他模块中的值和类型等导入到当前模块的环境中,从而被当前模块使用,同时模块也会导出一些内部的值和类型等,使其他模块得以使用 模块是代码复用…...

  • 梦飞 推荐

    第十一章:函子

    函子是Haskell中最基本的类型类之一,抽象的概括。 1.容器抽象 someFunction :: f a -> f b - 其中,f是一个类型变量,例如列表或Maybe someFunction :: a -> b -- 处理单独元素 的函数 fmap …...

  • 梦飞 推荐

    第十二章:透镜组

    操作复杂数据结构的首选方案:透镜组(使用函子抽象来构造数据操作函数) 1.getter和setter getter和setter并不是Haskell中出现的概念,而是很多面向对象语言中用来操作对象实例的一个语法,例如:JavaScript中 position = {x…...

  • 梦飞 推荐

    第十三章:应用函子

    作为函子的子类类型,应用函子概括了某些函子的额外特性:把函子里的函数作用到函子里的值。 1.函子的局限 函子抽象提供了fmap函数,用来把普通函数升格成可以操作函子容器的函数。例如我们可以把所有能出来a类型的函数升格成处理 Maybe a类型的函数 现假设有一个a-&gt…...

  • 梦飞 推荐

    第十四章:单位半群和一些有趣的应用函子

    1.单位半群 Monoid 凡是包含一个二元运算和这个运算对应的单位元的倒数结构都叫做单位半群:结合律和单位元 Haskell中使用类型类Monoid来描述这个数学概念 class Monoid a where mempty :: a --Identity of mapp…...

  • 梦飞 推荐

    第15章:解析器

    1.参数解析 解析器 parser 指的是从序列化之后的类型中提取出需要的数据类型的一类函数 对于简单的解析工作,可以使用Either数据类型以及他的应用实例 data Either a b =Left a | Right b instance Functor (Ei…...

  • 梦飞 推荐

    第十六章:单子

    单子是Haskell 中最出名的类型类,它捕捉了一类特殊的函子上下文操作:把两层函子包裹合并为一层。单子大大改变了函数式编程的体验,是Haskell的核心抽象类型类。 1.应用函子的局限 当计算被升格到函子的范畴后,这个计算就被确定了 而实际中常常需要根据上一步技术的结果…...

  • 梦飞 推荐

    第十七章:八皇后问题和列表单子

    1.列表单子 instance Monad []where return x = [x] x >>= f = concat $ fmap f x GHCi中输入对行排版的代码 ![enter image description here][1] 列表归纳 …...

  • 梦飞 推荐

    第十八章:Read单子

    1.(->)a的单子实例声明 instance Monad ((->) r) where return = pure --return x = \x -> x --(>>=) :: (r -> a) -> (a -> r -&…...

  • 梦飞 推荐

    第十九章:State单子

    Haskell中只有绑定没有变量带来了许多好处,但是仅依靠函数组合,一些依赖状态变换的算法变得难以书写。 1.什么是State单子 把状态转换过程的抽象,oldState对应老的状态,经过某一函数的计算,得到一个计算的结果someValue和一个新的状态newStateo…...

  • 梦飞 推荐

    第二十章:IO和它的伙伴们

    IO是运行程序和计算机外部世界交互的单子类型。IO也是State单子的一个非常特殊的情况。 1.IO单子的本质 ghc-prim函数库 newtype IO a = IO (State# RealWorld -> (# State# RealWorld, a #)…...

  • 梦飞 推荐

    第二十一章:语言扩展和程序标注

    之后的章节将介绍高级类型类和实际应用中的实践。 1.语言扩展 Language Extension 打开某个语言扩展 +源代码顶部加入以下代码,它在该文件内生效 {-# LANGUAGE Extension #-} +在GHCi中使用:set -XExtensio…...

  • 梦飞 推荐

    第22章:Foldable和Traversable

    1.Foldable Foldable 是约束最少的类型类,它要求提供一个把数据结构折叠成值的函数,这个函数可以看作对列表的折叠操作的推广 class Foldable t where fold :: Monoid m => t m -> m fold = fo…...

  • 梦飞 推荐

    第23章:列表、数组和散列表

    很多编程语言中,数组和散列表常常当作标准的数据结构被广泛使用。而在Haskell中,由于数据是很多抽象的核心,所以很多函数库提供了大量不同特性的数据结构(immutable and mutable)。 1.列表 immutable Haskell中常当作循环控制结构,底层…...

  • 梦飞 推荐

    第24章:单子变换

    单子变换要解决的核心问题:如何组合不同的单子上下文来获得新的单子实例。 1. Kleisli范畴 ![enter image description here][1] 连接单子运算的函数 (>=>) :: (a -> [b]) -> (b -&g…...

  • 梦飞 推荐

    第25章:单子变换的升格操作

    单子变换就是一类函数,用来把单子m包裹成单子t m,同时声明在这种情况下对应的单子实例。 实际当中,我们常遇到多个单子变换叠加的情况,分析单子变换的类型时,按顺序来看 我们把通过叠加单子变换得到的单子叫单子栈 monad stack 问题是:当单子变换的层级变深时,lift操…...

  • 梦飞 推荐

    第26章:高效字符串处理

    base——String [Char],bytestring——ASCII,test——Unicode字符串 1.bytestring函数库 处理二进制数据 vector函数库中Vector表示这样的类型 Char默认表示Unicode编码的字符,所以用Word8来代替C…...

  • 梦飞 推荐

    第31章:高级类型编程

    由不同类型元素组成的列表——异类表的相关问题 1.Typeable和Dynamic Data.Typeable模块 ![enter image description here][1] --获取类型信息的方法 typeOf :: forall a. Typeable …...

  • 黄志斌 7推荐

    604. 正方形中的凸路径

    题目 Problem 604. Convex path in square Let F(N) be the maximum number of lattice points in an axis-aligned N × N square that the graph of…...

  • 电子版大约啥时候能出来啊? 看纸质的太不方便了,尤其是需要试验代码的时候,书都不知道往哪摆好了,那种销魂的姿势。。。关键是总也想不起来看,天天放在包里,就因为懒得往外拿而自动忽略了。。。就这样都看了一多半了,再不出电子版的,我都看完了 -_-!!!
    M0rphism  发表于 2016-11-20 11:30:18
    推荐
  • 这本书会有电子版么?
    小娘子  发表于 2016-08-26 15:24:59
    推荐
    • 会有,但会晚些时间出版

      王军花  发表于 2016-08-26 16:01:38
  • 希望有电子版
    x1957  发表于 2016-09-10 17:34:56
    推荐
  • 想要电子版 Haskell的书真的是很珍贵啊。
    codepapa  发表于 2016-09-12 17:36:47
    推荐
  • 家里面书太多了,不想买纸质的了,什么时候出电子版?
    x1957  发表于 2016-10-25 09:52:40
    推荐
    • 同求。关键是不习惯看纸质书了

      M0rphism  发表于 2016-11-06 09:00:22
  • 安装哪个版本的呢?我安装的 8.0.1 的版本,打开 ghci 输入1.2章节中的表达式 sort [3,8,1,4],为什么出错呢?粘贴到官网主页上的交互式演示运行后倒是可以得出结果的。出错信息是:
    <interactive>:1:1: error:
    • Variable not in scope: sort :: [Integer] -> t
    • Perhaps you meant ‘sqrt’ (imported from Prelude)
    英文意思能看明白,我却不知道该如何下手……
    大雄兔  发表于 2016-11-25 12:24:51
    推荐
    • 自问自答:使用 sort 前先 import Data.List,官网的怎么不要呢?版本差异?还是官网默认全部加载了?

      大雄兔  发表于 2016-11-25 15:41:30
    • 强烈建议下一个修订版本印刷或电子版用到后续知识点的话加上索引注释,否则对新人太不友好了

      大雄兔  发表于 2016-11-25 15:44:06
    • 我整理了一份索引:http://www.ituring.com.cn/article/273560

      黄志斌  发表于 2016-11-25 17:00:11
    • 不错不错,很用心很有用,收藏了

      大雄兔  发表于 2016-11-25 18:55:49
  • 是基于 haskellstack 的吧?
    AriesDevil  发表于 2016-09-02 18:10:26
    推荐
    • 用的还是cabal,不是stack...不过好在stack常用的也就那么几个命令,看下文档就可以了

      网事已疯  发表于 2016-09-18 11:06:58
  • 电子版 9 月份能出来么? 不能的话就买纸质的了
    M0rphism  发表于 2016-09-19 20:07:01
    推荐
    • 9月份电子版出不来

      王军花  发表于 2016-09-20 09:43:03
    • 纸质书里面的英文字体挺不错的,叫什么名字啊?

      M0rphism  发表于 2016-09-24 20:03:57
    • @M0rphism:代码所用的字体应该是The Sans Mono Condensed

      prinwis  发表于 2016-11-02 01:00:20
    • 找到了,然而字母 O 和 0 不容易区分,不然就完美了

      M0rphism  发表于 2016-11-06 08:59:25
  • 电子书有了没有?
    codepapa  发表于 2017-01-17 22:21:40
    推荐
    • 还没出版,出版时间待定

      王军花  发表于 2017-01-18 10:37:55
  • 什么时候出版啊?haskell书籍还是比较少。。希望早点出版
    for(;;)  发表于 2016-09-08 15:40:35
    推荐
  • 图灵的书评区的唯一作用就是用来询问/告知电子版本的信息,哈哈哈哈
    舒克贝塔  发表于 2016-11-16 16:24:56
    推荐
  • 这个今年还会出电子版么?我想看电子版的,貌似看留言最早8月份就有人问了,结果没结果……
    大雄兔  发表于 2016-12-05 17:48:41
    推荐
  • 买了实体书,年底没时间看了。马上要过年了,能让我买本电子版的带回家吗?
    大雄兔  发表于 2016-12-09 13:01:19
    推荐
  • 看了前四章,感觉好难上手,先放放
    张宁宁  发表于 2017-04-20 18:13:33
    推荐
  • 电子版大约啥时候能出来啊?
    AriesDevil  发表于 2017-05-27 19:13:22
    推荐