|
| 1 | +> 这里是中文版! |
| 2 | +
|
| 3 | +# Idris 2 中的函数式编程 |
| 4 | + |
| 5 | + |
| 6 | + |
| 7 | +这个项目的目标是:要成为 Idris 编程语言的全面指南,其中包含大量针对函数式编程新手的介绍性材料。 |
| 8 | + |
| 9 | +内容将分为几个部分,其中关于核心语言特性的部分是 Idris 函数式编程主要指南。每个部分都由几个章节组成,每个章节都试图深入介绍 Idris 编程语言及其核心库的某个方面。大多数章节都附带(有时很多)练习,在目录 `src/Solutions` 中提供了解决方案。 |
| 10 | + |
| 11 | +目前,虽然关于核心语言特性的部分还没有完成,但正在积极开发中,并在我自己的几个学生身上进行尝试,其中一些甚至是函数式编程的萌新。 |
| 12 | + |
| 13 | +## 目录 |
| 14 | + |
| 15 | +### 第 1 部分:核心语言特性 |
| 16 | + |
| 17 | +这部分试图对 Idris 编程语言进行深入的介绍。如果您是函数式编程的新手,请确保按顺序阅读这些章节并*解决所有练习*。 |
| 18 | + |
| 19 | +如果您已经使用过其他纯函数式编程语言,例如 Haskell,那么您可能会很快完成介绍性材料(函数第 1 部分,代数数据类型和接口),因为这些内容中的大部分内容您已经很熟悉了。 |
| 20 | + |
| 21 | +1. [介绍](src/Tutorial/Intro.md) |
| 22 | + |
| 23 | + 1. [关于 Idris 编程语言](src/Tutorial/Intro.md#关于-Idris-编程语言) |
| 24 | + |
| 25 | + 2. [使用 REPL](src/Tutorial/Intro.md#使用-REPL) |
| 26 | + |
| 27 | + 3. [第一个 Idris 程序](src/Tutorial/Intro.md#第一个-Idris-程序) |
| 28 | + |
| 29 | + 4. [如何声明一个 Idris 定义](src/Tutorial/Intro.md#如何声明一个-Idris-定义) |
| 30 | + |
| 31 | + 5. [在哪里可以获得帮助](src/Tutorial/Intro.md#在哪里可以获得帮助) |
| 32 | + |
| 33 | +2. [函数第 1 部分](src/Tutorial/Functions1.md) |
| 34 | + |
| 35 | + 1. [多参函数](src/Tutorial/Functions1.md#多参函数) |
| 36 | + |
| 37 | + 2. [函数组合](src/Tutorial/Functions1.md#函数组合]) |
| 38 | + |
| 39 | + 3. [高阶函数](src/Tutorial/Functions1.md#高阶函数) |
| 40 | + |
| 41 | + 4. [柯里化](src/Tutorial/Functions1.md#柯里化) |
| 42 | + |
| 43 | + 5. [匿名函数](src/Tutorial/Functions1.md#匿名函数) |
| 44 | + |
| 45 | + 6. [运算符](src/Tutorial/Functions1.md#运算符) |
| 46 | + |
| 47 | +3. [代数数据类型](src/Tutorial/DataTypes.md) |
| 48 | + |
| 49 | + 1. [枚举](src/Tutorial/DataTypes.md#枚举) |
| 50 | + |
| 51 | + 2. [和类型](src/Tutorial/DataTypes.md#和类型) |
| 52 | + |
| 53 | + 3. [记录](src/Tutorial/DataTypes.md#记录) |
| 54 | + |
| 55 | + 4. [泛型数据类型](src/Tutorial/DataTypes.md#泛型数据类型) |
| 56 | + |
| 57 | + 5. [数据定义的替代语法](src/Tutorial/DataTypes.md#数据定义的替代语法) |
| 58 | + |
| 59 | +4. [接口](src/Tutorial/Interfaces.md) |
| 60 | + |
| 61 | + 1. [接口基础](src/Tutorial/Interfaces.md#接口基础) |
| 62 | + |
| 63 | + 2. [接口的更多内容](src/Tutorial/Interfaces.md#接口的更多内容) |
| 64 | + |
| 65 | + 3. [Prelude 中的接口](src/Tutorial/Interfaces.md#Prelude-中的接口) |
| 66 | + |
| 67 | +5. [函数第 2 部分](src/Tutorial/Functions2.md) |
| 68 | + |
| 69 | + 1. [绑定和局部定义](src/Tutorial/Functions2.md#绑定和局部定义) |
| 70 | + |
| 71 | + 2. [函数参数的真相](src/Tutorial/Functions2.md#函数参数的真相) |
| 72 | + |
| 73 | + 3. [使用孔编程](src/Tutorial/Functions2.md#使用孔编程) |
| 74 | + |
| 75 | +6. [依赖类型](src/Tutorial/Dependent.md) |
| 76 | + |
| 77 | + 1. [长度索引列表](src/Tutorial/Dependent.md#长度索引列表) |
| 78 | + |
| 79 | + 2. [Fin: 向量的安全索引](src/Tutorial/Dependent.md#Fin:-向量的安全索引) |
| 80 | + |
| 81 | + 3. [编译期计算](src/Tutorial/Dependent.md#编译期计算) |
| 82 | + |
| 83 | +7. [IO:带有副作用的编程](src/Tutorial/IO.md) |
| 84 | + |
| 85 | + 1. [纯的副作用?](src/Tutorial/IO.md#纯的副作用?) |
| 86 | + |
| 87 | + 2. [Do 块,脱糖](src/Tutorial/IO.md#Do-块,脱糖) |
| 88 | + |
| 89 | + 3. [使用文件](src/Tutorial/IO.md#使用文件) |
| 90 | + |
| 91 | + 4. [IO 是如何实现的](src/Tutorial/IO.md#IO-是如何实现的) |
| 92 | + |
| 93 | +8. [函子和它的伙伴们](src/Tutorial/Functor.md) |
| 94 | + |
| 95 | + 1. [函子](src/Tutorial/Functor.md#函子) |
| 96 | + |
| 97 | + 2. [应用函子](src/Tutorial/Functor.md#应用函子) |
| 98 | + |
| 99 | + 3. [单子](src/Tutorial/Functor.md#单子) |
| 100 | + |
| 101 | + 4. [背景与延伸阅读](src/Tutorial/Functor.md#背景与延伸阅读) |
| 102 | + |
| 103 | +9. [递归与折叠](src/Tutorial/Folds.md) |
| 104 | + |
| 105 | + 1. [递归](src/Tutorial/Folds.md#递归) |
| 106 | + |
| 107 | + 2. [关于完全性检查的一些注意事项](src/Tutorial/Folds.md#关于完全性检查的一些注意事项) |
| 108 | + |
| 109 | + 3. [Foldable 接口](src/Tutorial/Folds.md#Foldable-接口) |
| 110 | + |
| 111 | +10. [带副作用的遍历](src/Tutorial/Traverse.md) |
| 112 | + |
| 113 | + 1. [阅读 CSV 表格](src/Tutorial/Traverse.md#阅读-CSV-表格) |
| 114 | + |
| 115 | + 2. [使用状态编程](src/Tutorial/Traverse.md#使用状态编程) |
| 116 | + |
| 117 | + 3. [组合的力量](src/Tutorial/Traverse.md#组合的力量) |
| 118 | + |
| 119 | +11. [Sigma 类型](src/Tutorial/DPair.md) |
| 120 | + |
| 121 | + 1. [依赖对](src/Tutorial/DPair.md#依赖对) |
| 122 | + |
| 123 | + 2. [用例:核酸](src/Tutorial/DPair.md#用例:核酸) |
| 124 | + |
| 125 | + 3. [用例:带有模式的 CSV 文件](src/Tutorial/DPair.md#用例:带有模式的-CSV-文件) |
| 126 | + |
| 127 | +12. [命题等式 Equality](src/Tutorial/Eq.md) |
| 128 | + |
| 129 | + 1. [相等作为类型](src/Tutorial/Eq.md#相等作为类型) |
| 130 | + |
| 131 | + 2. [程序作为证明](src/Tutorial/Eq.md#程序作为证明) |
| 132 | + |
| 133 | + 3. [遁入虚无](src/Tutorial/Eq.md#遁入虚无) |
| 134 | + |
| 135 | + 4. [重写规则](src/Tutorial/Eq.md#重写规则) |
| 136 | + |
| 137 | +13. [谓词和证明搜索](src/Tutorial/Predicates.md) |
| 138 | + |
| 139 | + 1. [前置条件](src/Tutorial/Predicates.md#前置条件) |
| 140 | + |
| 141 | + 2. [值之间的契约](src/Tutorial/Predicates.md#值之间的契约) |
| 142 | + |
| 143 | + 3. [用例:灵活的错误处理](src/Tutorial/Predicates.md#用例:灵活的错误处理) |
| 144 | + |
| 145 | + 4. [接口的真相](src/Tutorial/Predicates.md#接口的真相) |
| 146 | + |
| 147 | +14. [原语](src/Tutorial/Prim.md) |
| 148 | + |
| 149 | + 1. [原语的实现](src/Tutorial/Prim.md#原语的实现) |
| 150 | + |
| 151 | + 2. [使用字符串](src/Tutorial/Prim.md#使用字符串) |
| 152 | + |
| 153 | + 3. [整数](src/Tutorial/Prim.md#整数) |
| 154 | + |
| 155 | + 4. [细化原语](src/Tutorial/Prim.md#细化原语) |
| 156 | + |
| 157 | + |
| 158 | +### 第 2 部分:附录 |
| 159 | + |
| 160 | +附录可用作手头主题的参考。我计划最终对 Idris 语法、典型错误消息、模块系统、交互式编辑以及可能的其他内容有一个简明的参考。 |
| 161 | + |
| 162 | +1. [Neovim 中的交互式编辑](src/Appendices/Neovim.md) |
| 163 | + |
| 164 | + |
| 165 | +## 前置条件 |
| 166 | + |
| 167 | +目前,该项目正在针对 Idris 2 存储库的主要分支进行积极开发和演进。它每晚在 GitHub 上进行测试,并针对 Idris 2 主分支的最新提交以及文件 `.idris-version` 中列出的 Idris 2 提交进行构建。 |
0 commit comments