改写自 十分钟魔法练习 - 玩火 原版为 Java 实现
另有 Rust 版 - 光量子 | C++版 - 图斯卡蓝瑟 | C#版 - CWKSC | Lua 版 - Ofey Chan | Python 版 - penguin_wwy
抽象与组合
希望能在十分钟内教会你一样魔法,并尽可能展示 OCaml 的使用姿势。
虽然 Haskell 表达能力更强就是了 (( ◞•̀д•́)◞⚔◟(•̀д•́◟ ))
个人水平有限,不保证全部正确性,欢迎大家批判指正。
QQ群:1070975853 | Telegram Group
目录中方括号里的是前置技能。
$ dune exec ./magic.exe
偏易|代数数据类型(Algebraic Data Type)[OCaml 基础]
偏易|广义代数数据类型(Generalized Algebriac Data Type)[OCaml 基础,ADT]
偏易|余代数数据类型(Coalgebraic Data Type)[OCaml 基础,ADT]
较难|高阶类型(Higher Kinded Type)[OCaml 基础]
较难|状态单子(State Monad)[OCaml 基础,HKT,Monad]
[中等|简单类型 λ 演算(Simply-Typed Lambda Calculus)[Java 基础,ADT,λ 演算]](doc/STLC.md)
[中等|系统 F(System F)[Java 基础,ADT,简单类型 λ 演算]](doc/SystemF.md)
[中等|系统 Fω(System Fω)[Java 基础,ADT,系统 F]](doc/SysFO.md)
[较难|构造演算(Calculus of Construction)[Java 基础,ADT,系统 Fω]](doc/CoC.md)
[偏易|π 类型和 Σ 类型(Pi type & Sigma type)[ADT,构造演算]](doc/PiSigma.md)
[较难|λ演算(Lambda Calculus)[Java基础,ADT]](TheoryOfComputation/Lambda.md)
[偏易|求值策略(Evaluation Strategy)[Java基础,λ演算]](TheoryOfComputation/EvalStrategy.md)
[较难|丘奇编码(Church Encoding)[λ 演算]](TheoryOfComputation/ChurchE.md)
很难|斯科特编码(Scott Encoding)[OCaml基础,构造演算,ADT,μ]
[中等|Y 组合子(Y Combinator)[Java 基础,λ 演算,λ 演算编码]](TheoryOfComputation/YCombinator.md)
[中等|μ(Mu)[Java 基础,构造演算, Y 组合子]](TheoryOfComputation/Mu.md)
[中等|向量和有限集(Vector & FinSet)[构造演算, ADT ,依赖类型模式匹配]](TheoryOfComputation/VecFin.md)
[偏易|Curry-Howard 同构(Curry-Howard Isomorphism)[构造演算]](src/CHIso.md)
简单|表驱动编程(Table-Driven Programming)[简单 OCaml 基础]
简单|续延(Continuation)[简单 OCaml 基础]
[中等|代数作用(Algebraic Effect)[简单 OCaml 基础,续延]](Paradigms/Algeff.md)
[中等|依赖注入(Dependency Injection)[Java基础,Monad,代数作用]](Paradigms/DepsInj.md)
[中等|提升(Lifting)[OCaml 基础,HKT,Monad]](Paradigms/Lifting.md)
[较难|解析器单子(Parser Monad)[Java基础,HKT,Monad]](doc/ParserM.md)
[中等|解析器组合子(Parser Combinator)[Java基础,HKT,Monad]](doc/Parsec.md)