![]() 作者:韩冬 出版社: 人民邮电出版社 出版年: 2016-9 页数: 354 定价: 79.00 装帧: 平装 ISBN: 9787115432834 内容简介 · · · · · ·本书是一本由浅入深的Haskell教程。书中首先介绍Haskell的基础语法和函数式编程的基本概念,以及GHC、GHCi、Cabal等工具的用法;接着按照函子→应用函子→单子的顺序介绍Haskell中核心的三大类型类,并以列表单子、Reader单子和State单子为例详细分析单子类型类的来龙去脉;后介绍Foldable和Traversable类型类、单子变换、GHC的语言扩展和程序标注,以及网络编程、数据库、并发并行、序列化/反序列化与泛型编程、异常处理等内容。 作者简介 · · · · · ·韩冬,北京理工大学07级毕业生,毕业后从事嵌入式开发,后投身互联网行业,曾任职百度、美团网高级前端工程师,现在在滴滴出行平台架构组从事架构开发工作。在工作中实践函数式编程,经验丰富。 目录 · · · · · ·第一部分 基础知识第1章 基本语法和GHCi 3 1.1 注释 3 1.2 表达式 3 1.3 声明 4 1.3.1 类型声明和绑定声明 4 · · · · · ·() 第一部分 基础知识 第1章 基本语法和GHCi 3 1.1 注释 3 1.2 表达式 3 1.3 声明 4 1.3.1 类型声明和绑定声明 4 1.3.2 模块声明和导入声明 5 1.4 函数 6 1.5 GHCi 8 1.6 初级函数 10 第2章 data和模式匹配 13 2.1 数据声明data 13 2.2 模式匹配 14 2.2.1 无处不在的模式匹配 15 2.2.2 @pattern 16 2.3 各式各样的数据类型 16 2.3.1 多构造函数 16 2.3.2 完备性检查 17 2.3.3 无参数构造函数 18 2.3.4 data与类型变量 18 2.3.5 记录语法 20 2.4 排版规则 22 第3章 列表、递归和盒子比喻 23 3.1 列表 23 3.1.1 等差数列 24 3.1.2 匹配列表 24 3.2 递归操作 26 3.3 盒子比喻 30 第4章 元组、类型推断和高阶函数 34 4.1 元组 34 4.2 类型推断 35 4.3 高阶函数 37 4.3.1 拉链和zipWith 39 4.3.2 柯里化 41 第5章 常用的高阶函数和函数的补充 语法 43 5.1 应用函数$和& 43 5.2 匿名函数 44 5.3 组合函数. 45 5.4 函数的补充语法 46 5.4.1 where 46 5.4.2 guard 47 5.4.3 MultiWayIf 49 5.4.4 where与let 49 5.5 Point free 49 5.6 黑魔法词汇表 51 第6章 常用的列表操作:映射、过滤、 折叠和扫描 53 6.1 映射 53 6.2 过滤 54 6.3 折叠 55 6.4 扫描 57 6.5 方向是相对的 60 第7章 类型类 62 7.1 实例声明 62 7.2 类声明 65 7.3 类型类的实现 66 7.3.1 层级和约束 67 7.3.2 推导类型类 68 7.3.3 Show/Read 69 第8章 数字相关的类型类 71 8.1 顺序类 71 8.2 data和类型约束 72 8.3 枚举类 73 8.4 边界类 75 8.5 数字类 76 第9章 type、newtype和惰性求值 80 9.1 类型别名type 80 9.2 新类型声明newtype 81 9.3 惰性求值 84 9.3.1 标记语义、常态和弱常态 87 9.3.2 seq和deepseq 90 第10章 模块语法以及cabal、Haddock 工具 94 10.1 模块语法 94 10.2 使用cabal 96 10.2.1 使用cabal安装依赖 96 10.2.2 项目的cabal配置 98 10.3 Haddock 101 第二部分 重要的类型和类型类 第11章 函子 107 11.1 容器抽象 107 11.2 范畴 110 11.3 Identity和Const 115 11.4 IO函子 117 第12章 透镜组 118 12.1 getter和setter 118 12.2 透镜组 120 12.3 view、set和over函数 122 12.3.1 over函数 122 12.3.2 set函数 124 12.3.3 view函数 125 12.4 函数库 128 第13章 应用函子 129 13.1 函子的局限 129 13.2 什么是函子 133 13.2.1 Reader应用函子 134 13.2.2 自然升格 135 13.3 IO应用函子 138 第14章 单位半群和一些有趣的应用 函子 139 14.1 单位半群 139 14.1.1 Endo单位半群 141 14.1.2 自由单位半群 142 14.1.3 逆 144 14.2 当单位半群遇上应用函子 145 14.2.1 Const a的应用函子实例 145 14.2.2 选择应用函子 146 14.2.3 拉链应用函子 147 第15章 解析器 149 15.1 参数解析 149 15.2 optparse-applicative 151 15.3 选择解析 153 第16章 单子 158 16.1 应用函子的局限 158 16.2 什么是单子 159 16.2.1 粘合函数 161 16.2.2 do语法糖 163 16.3 IO单子 165 第17章 八皇后问题和列表单子 168 17.1 列表单子与数组归纳 168 17.2 八皇后问题 169 17.3 MonadPlus 171 17.4 结构控制函数 173 17.4.1 sequence/sequence_ 173 17.4.2 mapM/mapM_ 174 17.4.3 replicateM/replicateM_ 175 17.4.4 forever 176 17.4.5 filterM 176 17.4.6 foldM/foldM_ 177 第18章 Reader单子 179 18.1 (->)a的单子实例声明 179 18.2 模板渲染 180 18.3 Reader新类型 185 第19章 State单子 187 19.1 什么是State单子 187 19.2 随机数 192 19.3 简易计算器 195 第20章 IO和它的伙伴们 197 20.1 IO单子的本质 197 20.2 基本IO操作 199 20.3 IO中的变量 202 20.4 forkIO 203 20.5 ST单子 204 20.6 后门函数 206 第三部分 高级类型类和项目实践 第21章 语言扩展和程序标注 211 21.1 语言扩展 211 21.2 严格求值数据项 214 21.3 惰性模式 214 21.4 程序标注 215 21.5 编译选项 217 21.6 运行分析 218 第22章 Foldable和Traversable 221 22.1 Foldable 221 22.2 折叠与单位半群 224 22.3 Traversable 226 22.4 推导规则 230 22.5 Data.Coerce 231 第23章 列表、数组和散列表 233 23.1 列表 233 23.2 数组 236 23.3 散列表 242 第24章 单子变换 245 24.1 Kleisli范畴 245 24.2 ReaderT 246 24.3 Identity和IdentityT 248 24.4 StateT 250 24.5 RandT 253 第25章 单子变换的升格操作 256 25.1 MonadIO 258 25.2 MonadState和MonadReader 258 25.3 类型家族 260 25.4 Lazy StateT和Strict StateT 262 25.5 Writer单子 263 第26章 高效字符串处理 266 26.1 bytestring函数库 266 26.1.1 Lazy ByteString 267 26.1.2 ByteString Builder 268 26.2 text和utf8-string函数库 272 26.3 mono-traversable函数库 274 第27章 网络编程 276 27.1 wai/warp 276 27.2 wai-extra 279 27.3 HTTP的单子抽象 280 27.4 WebSocket编程 281 27.5 Socket编程 283 第28章 Haskell与数据库 286 28.1 persistent 286 28.2 esqueleto 292 第29章 模板编程 296 29.1 什么是模板 296 29.2 Q单子 299 29.3 拼接 301 29.4 reify 303 第30章 并发和并行编程 306 30.1 运行时工作原理 306 30.2 并行编程 308 30.3 并发编程 310 30.3.1 MVar 311 30.3.2 STM 314 30.3.3 aysnc 316 第31章 高级类型编程 317 31.1 Typeable和Dynamic 317 31.2 存在类型 320 31.3 类型家族、数据家族和GADT 321 31.3.1 类型家族 321 31.3.2 数据家族 324 31.3.3 GADT 325 31.4 数据类别DataKinds 327 第32章 序列化/反序列化与泛型编程 331 32.1 aeson函数库 331 32.1.1 使用模板编程自动生成ToJSON/FromJSON实例 334 32.1.2 使用泛型提供的ToJSON/FromJSON 335 32.2 泛型 336 第33章 Haskell中的异常处理 342 33.1 使用Either/Maybe表示异常 342 33.2 运行时异常 343 33.2.1 异步异常 346 33.2.2 资源的清理和释放 348 33.3 纯函数中的异常处理 349 33.4 异常和单子变换 350 33.4.1 exceptions 350 33.4.2 monad-control 351 33.5 常见的异常处理问题 353 · · · · · · () "魔力Haskell"试读 · · · · · ·函子是Haskell中最基本的类型类之一。正如所有的抽象始于对相似物体的概括,函子就是这样的抽象的一个概括。例如,列表表示的是一类有多个元素的物体,Maybe表示一类有可能不存在的物体等。我们常常使用“容器”这个概念去理解函子,但这只是帮助我们理解,实际上函子远不止容器这么简单。下面就从函子(functor)开始,进入Haskell的抽象世界。11.1 容器抽象回忆之前学过的Mayb... |
忍不住一直看下去
以前买过
开始看的很有意思
通俗易懂的语言描述出来