Table of Contents
本篇记录一下学习 Haskell 过程中查阅的资料和踩过的坑。
一般来说学习一个新的编程语言都从 Hello World 开始,但是 Haskell 里要展开介绍 IO() 就不得不涉及到 Monad,
(不能理解 Monad 就是自函子范畴上的一个幺半群你还想用 Haskell 写出 Hello World ?)
这大概也是 Haskell 的学习曲线比较陡的原因,正因为此 Haskell 里的 Hello World 一般是用阶乘 或者 斐波那契数列,
学完之后就可以开始刷 PE 了,(因为 PE 几乎不用管 IO()、而且可以用暴力算法跑一天)。
学习的目标:
– [ ] 理性愉悦。
– [ ] 达成 彩虹小马 成就:在 Codeforces 的一场 Div2 Round 中,使用不同的语言 AC 每一道题。
– [ ] 读懂 PFDS 和 SICP。
– [ ] Javascript、Python 甚至现在 Cpp 里已经吸收了大量 FP 的 Feature,学习 FP 可以让我们更好的在这些语言中使用相关的 Feature。
常用资料
数据结构
- Data.Map
- https://hackage.haskell.org/package/fingertree-0.1.5.0/docs/Data-FingerTree.html
- https://hackage.haskell.org/package/combinat
书籍
- PFDS
- SICP
- Write You a Haskell
- SerranoMena2014_Book_PracticalHaskell
- SerranoMena2019_Book_PracticalHaskell
- http://dev.stephendiehl.com/hask/
视频
- Bilibili, Haskell for Imperative Programmers
- Bilibili,【CS公开课】计算机程序的构造和解释(SICP)【中英字幕】【FoOTOo&HITPT&Learning-SICP】
文档
博客
- https://crypto.stanford.edu/~blynn/haskell/
- https://www.stephendiehl.com/posts.html
- https://maskray.me/blog/
题库
Project Euler
- https://projecteuler.net/
- https://wiki.haskell.org/Euler_problems
- https://github.com/MaskRay/OJHaskell/tree/master/Project%20Euler
Codeforces
Luogu
知识点
斐波那契数列
筛素数
记忆化
Monad
- Bilibili, 直观理解 Haskell 中的 Functor、Applicative、Monad的 主要函数〔Haskell | manim | 4K〕
- http://wiki.haskell.org/Typeclassopedia
- http://blog.sigfpe.com/2007/04/trivial-monad.html
平衡树
不动点组合子
(Y 组合子 这个名字听起来像是 Ω 百合子 的姐姐。。。)