# Haskell MOOC

## Descriptions

- Offered by: University of Helsinki
- Prerequisites: None
- Programming Languages: Haskell
- Difficulty: 🌟🌟
- Class Hour: Varying according to the learner

Functional programming is increasingly being integrated into modern programming languages. Streams in Java, Promises in JavaScript, and Record & Tuple in the draft phase of ECMAScript... When I was learning these things, I always felt like I was memorizing the behaviours of their API, and although I was able to write some programs using them, I never felt like I had mastered them. Why do they exist? Why are they like that? What is the idea behind their design? Learning functional programming will give you the answer.

Its core ingredient is functional programming. Just like Java is probably the default choice for teaching object-oriented programming.

This course will teach just enough Haskell syntax, library functions, and a small number of tools to explain the core program semantics and the core idea of functional programming. This will save you time not getting bogged down in the details of the language and its ecology, which I think is the biggest advantage of the course.

Topics covered in the course:

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

If you have some programming experience, part 1 of the course is very easy. Most of the difficulties lie in part 2, after chap 13. Its exercises are great, which can give you a feeling of doing exercise of [CS61A](https://csdiy.wiki/%E7%BC%96%E7%A8%8B%E5%85%A5%E9%97%A8/CS61A/). There are enough hints in the comments and the solutions will be given to you after submission, and you can ask questions or discuss them with others in the official Telegram community.

## Course Resources

- Course Website: <https://haskell.mooc.fi/>
- Recordings: None
- Textbooks: <https://haskell.mooc.fi/>
- Assignments: <https://github.com/moocfi/haskell-mooc>
- Community: <https://t.me/haskell_mooc_fi>

## Personal Resources

All the resources and assignments used by @showtheunli in this course are maintained in [showthesunli/haskell-mooc - GitHub](https://github.com/showthesunli/haskell-mooc). (It is highly discouraged to refer to other people's implementations when working on assignments.)
