1 Introduction

2 Correctness of program construction

2.1 Equational reasoning

2.1.1 Correctness proofs

2.1.2 Property-based testing

2.1.3 Automatic optimization

2.2 Functional forms

2.2.1 Algebraic datatypes

data List α = Nil | Cons α (List α)

2.2.2 Fold

2.2.3 Unfold

2.2.4 Composition of functional forms

2.2.5 General laws

foldr f 1 e 1 ≡ foldr f 2 e 2 ⇔ f 1 ≡ f 2 ∧ e 1 ≡ e 2

   h (f a r) ≡ f a (h r)
-----------------------------
h ◦ foldr f e ≡ foldr f (h e)
h x = (foldr f1 e1 x, foldr f2 e2 x)
----------------------------------------
       h = foldr f (e1, e2)
where f a (r1, r2) = (f1 a r1, f2 a r2) 

2.3 Types

2.3.1 Polymorphic types

2.3.2 Type classes for overloading

2.3.3 Types and logic

2.4 Algebra of programming

2.4.1 Programming: Deriving programs from specifications

2.4.2 Programming theories

2.4.3 Programming theory development

2.4.4 Systems for program derivation

3 Structuring computation

3.1 Monadic composition

return :: α → Mα
(>>=)  :: M α → (α → M β) → M β

3.2 Embedded domain-specific languages.pdf

4 Parallel and distributed computation

4.1 Parallel functional programming

4.1.1 Skeleton parallel programming

4.1.2 Easy parallelization

4.2 Distributed functional programming

5 Functional thinking in practice

5.1 Education

5.2 Influences on other languages

5.3 Uses in industry

A tech blog at the time asked "How do you support 450 million users with only 32 engineers? For WhatsApp, acquired earlier this week by Facebook, the answer is Erlang".

6 Conclusion