img
share 分享

VIP会员

作者:CSDN

出版社:CSDN《程序员》

ISBN:1111111111117

VIP会员免费 (仅需0.8元/天) ¥ 40000.0

温馨提示: 价值40000元的1000本电子书,VIP会员随意看哦!

电子书推荐

更多资源 展开

real world haskell 中文版epub文件 评分:

real world haskell 中文版 第一章:入门 Haskell编程环境 初识解释器ghci 基本交互: 把ghci当作一个计算器 基本算术运算 算术奇事(quirk),负数的表示 布尔逻辑,运算符以及值比较 运算符优先级以及结合性 未定义的变量以及定义变量 处理优先级以及结合性规则 ghci里的命令行编辑 列表(Lists) 列表的操作符 字符串和字符 初识类型 行计数程序 练习 第二章:类型和函数 类型是干什么用的? Haskell 的类型系统 强类型 静态类型 类型推导 正确理解类型系统 一些常用的基本类型 调用函数 复合数据类型:列表和元组 处理列表和元组的函数 将表达式传给函数 函数类型 纯度 Haskell 源码,以及简单函数的定义 变量 条件求值 通过示例了解求值 惰性求值 一个更复杂的例子 递归 终止递归 从递归中返回 学到了什么? Haskell 里的多态 对多态函数进行推理 延伸阅读 多参数函数的类型 为什么要对纯度斤斤计较? 回顾 第三章:Defining Types, Streamlining Functions 定义新的数据类型 类型构造器和值构造器的命名 类型别名 代数数据类型 什么情况下该用元组,而什么情况下又该用代数数据类型? 其他语言里类似代数数据类型的东西 模式匹配 组成和解构 更进一步 模式匹配中的变量名命名 通配符模式匹配 穷举匹配模式和通配符 记录语法 参数化类型 递归类型 练习 报告错误 让过程更可控的方法 引入局部变量 屏蔽 where 从句 局部函数与全局变量 The Offside Rule and Whitespace in an Expression The Case Expression Common Beginner Mistakes with Patterns Conditional Evaluation with Guards Exercises 第四章:函数式编程 使用 Haskell 思考 一个简单的命令行程序 循环的表示 显式递归 对列表元素进行转换 列表映射 筛选列表元素 处理收集器并得出结果 左折叠 为什么使用 fold 、 map 和 filter ? 从右边开始折叠 左折叠、惰性和内存泄漏 延伸阅读 匿名(lambda)函数 部分函数应用和柯里化 节 As-模式 通过组合函数来进行代码复用 编写可读代码的提示 内存泄漏和严格求值 通过 seq 函数避免内存泄漏 seq 的用法 第五章:编写 JSON 库 JSON 简介 在 Haskell 中表示 JSON 数据 Haskell 模块 编译 Haskell 代码 载入模块和生成可执行文件 打印 JSON 数据 类型推导是一把双刃剑 更通用的转换方式 Haskell 开发诀窍 美观打印字符串 数组和对象 书写模块头 完成美观打印库 紧凑转换 真正的美观打印 理解美观打印器 练习 创建包 为包添加描述 GHC 的包管理器 配置,构建和安装 实用链接和扩展阅读 第六章:类型类 类型类的作用 什么是类型类? 定义类型类实例 几个重要的内置类型类 Show Read 使用 Read 和 Show 进行序列化 数字类型 相等性,有序和对比 自动派生 类型类实战:让 JSON 更好用 让错误信息更有用 使用类型别名创建实例 生活在开放世界 什么时候重叠实例(Overlapping instances)会出问题? 取消类型类的一些限制 字符串的 show 是如何工作的? 如何给类型定义新身份(Identity) data 和 newtype 的区别 命名类型的三种方式 JSON typeclasses without overlapping instances 可怕的单一同态限定(monomorphism restriction) 结论 第七章:I/O Haskell经典I/O Pure vs. I/O 为什么纯不纯很重要? 使用文件和句柄(Handle) 关于 openFile 的更多信息 关闭句柄 Seek and Tell 标准输入,输出和错误 删除和重命名文件 临时文件 扩展例子:函数式I/O和临时文件 惰性I/O hGetContents readFile和writeFile 一言以蔽惰性输出 interact interact 过滤器 The IO Monad 动作(Actions) 串联化 Return的本色 Haskell 实际上是命令式的吗? 惰性I/O的副作用 缓冲区(Buffering) 缓冲区模式 刷新缓冲区 读取命令行参数 环境变量 第八章:高效文件处理、正则表达式、文件名匹配 高效文件处理 二进制 I/O 和有限载入 文本 I/O 匹配文件名 Haskell 中的正则表达式 结果的多种类型 进一步了解正则表达式 不同类型字符串的混合与匹配 你要知道的其他一些事情 将 glob 模式翻译为正则表达式 练习 重要的题外话:编写惰性函数 利用我们的模式匹配器 练习 通过 API 设计进行错误处理 练习 让我们的代码工作 练习 第九章:I/O学习 —— 构建一个用于搜索文件系统的库 find命令 简单的开始:递归遍历目录 再次认识匿名和命名函数 为什么提供 mapM 和 forM 一个本地查找函数 谓词在保持纯粹的同时支持从贫类型到富类型 安全的获得一个文件的大小 请求-使用-释放循环 为谓词而开发的领域特定语言 多用提升(lifting)少用模板 谓词组合 定义并使用新算符 控制遍历 练习 代码深度,可读性和学习过程 观察迭代函数的另一种方法 练习 代码指南 常用布局风格 练习 第十章:代码案例学习:解析二进制数据格式 灰度文件 解析原始 PGM 文件 消除样板代码 隐式状态 identity 解析器 记录语法、更新以及模式匹配 一个更有趣的解析器 获取和修改解析状态 报告解析错误 把解析器串联起来 Functor 简介 给类型定义加约束不好 fmap 的中缀使用 灵活实例 更多关于 Functor 的思考 给 Parse 写一个 Functor 实例 利用 Functor 解析 重构 PGM 解析器 未来方向 练习 第十一章:测试和质量保障 QuickCheck: 基于类型的测试 性质测试 利用模型进行测试 测试案例学习:美观打印器 生成测试数据 测试文档构建 以列表为模型 完成测试框架 用 HPC 衡量测试覆盖率 第十三章:数据结构 关联列表 Map 类型 函数也是数据 扩展示例: /etc/password 扩展示例:数字类型(Numeric Types) 第一步 完整代码 练习 把函数当成数据来用 把差异列表转成库 列表、差异列表和幺半群(monoids) 通用序列 第十八章: Monad变换器 动机: 避免样板代码 简单的Monad变换器实例 Monad和Monad变换器中的模式 叠加多个Monad变换器 缺失的类型参数呢? 隐藏细节 练习 深入Monad栈中 何时需要显式的抬举? 构建以理解Monad变换器 建立Monad变换器 更多的类型类实例 以Monad栈替代Parse类型 练习 注意变换器堆叠顺序 纵观Monad与Monad变换器 对纯代码的干涉 对次序的过度限定 运行时开销 缺乏灵活性的接口 综述 第十九章: 错误处理 使用数据类型进行错误处理 使用Maybe 使用Either 异常 异常第一步 惰性和异常处理 使用handle 选择性地处理异常 I/O异常 抛出异常 动态异常 练习 monad中的错误处理 一个小的解析构架 级习 第二十章:使用 Haskell 进行系统编程 调用外部程序 目录和文件信息 终止程序 日期和时间 ClockTime 和 CalendarTime 文件修改日期 延伸的例子: 管道 使用管道做重定向 更好的管道 关于管道,最后说几句 第二十一章:数据库的使用 HDBC 简介 安装 HDBC 和驱动 连接数据库 事务 简单的查询示例 SqlValue 查询参数 预备语句 读取结果 使用语句进行数据读取操作 惰性读取 数据库元数据 错误处理 第二十二章:扩展示例 —— Web 客户端编程 基本类型 数据库 分析器 下载 主程序 第二七章:Socket 和 Syslog 基本网络 使用 UDP 通信 UDP 客户端例子:syslog UDP Syslog 服务器 使用 TCP 通信 处理多个 TCP 流 TCP Syslog 服务器 TCP Syslog 客户端 第二十八章:软件事务内存 (STM) 基础知识 一些简单的例子 STM的安全性 重试一个事务 retry 时到底发生了什么? 选择替代方案 在事务中使用高阶代码 I/O 和 STM 线程之间的通讯 并发网络链接检查器 检查一个链接 工作者线程 查找链接 命令行的实现 模式守卫 (Pattern guards) STM的实践意义 合理的放弃控制权 使用不变量

...展开详情
上传时间:2018-04 大小:563KB
热门图书