# Haskell MOOC

## 课程简介

- 所属大学：University of Helsinki
- 先修要求：无
- 编程语言：Haskell
- 课程难度：🌟🌟
- 预计学时：因人而异

函数式编程正在越来越多的融合入现代编程语言。Java 的 Streams，JavaScript 的 Promises，以及在 ECMAScript 草案阶段的 Record & Tuple。在学习这些内容时，我总是感觉我在死记它们这些 api 的行为，虽然能够使用它们写出一些程序，但总感觉不到掌握了它们。究其原因，它们为什么存在？它们为什么是这样的？设计它们的思想是什么？学完函数式编程会给你答案。

虽然这门课的名字是 Haskell，但它的核心内容是函数式编程思想。就像学习面向对象程序设计，大概率不会选择 Java 之外的语言。

学习 Haskell，但重点不在于使用它。这门课会让你用刚刚够用的 Haskell 语法，刚刚够用的库函数，一丁点的工具，去解释核心的程序语义，也就是函数式编程的核心思想。这不会让你浪费时间陷入语言细节以及语言生态中，我觉得它是这门课的最大优势。

这门课覆盖的内容：

- Pure Function
- Lazy Evaluation
- Strongly Typed
- Type Inferred
- Curry
- Monoid / Functor / Monad / Applicative

如果你有编程经验，课程的 Part1 很简单，难度集中在 Part2 的十三章之后。课程的练习很棒，它有一种在做 [CS61a](https://csdiy.wiki/%E7%BC%96%E7%A8%8B%E5%85%A5%E9%97%A8/CS61A/) 练习的感觉。练习的注释中有足够的提示，作业在你提交之后会给你标准答案，你还可以在官方的 Telegram 中提问或与他人讨论。

## 课程资源

- 课程网站：<https://haskell.mooc.fi/>
- 课程视频：无
- 课程教材：<https://haskell.mooc.fi/>
- 课程作业：<https://github.com/moocfi/haskell-mooc>
- 社区：<https://t.me/haskell_mooc_fi>

## 资源汇总

@showtheunli 在学习这门课中用到的所有资源和作业实现都汇总在 [showthesunli/haskell-mooc - GitHub](https://github.com/showthesunli/haskell-mooc) 中。(非常不建议在作业时，参考别人的实现)
