Functional Programming

  1. Type Systems in Functional Programming
    1. The Role of Types
      1. Type Safety
        1. Expressiveness
          1. Documentation Through Types
            1. Compiler Optimizations
            2. Static vs. Dynamic Typing
              1. Advantages and Trade-offs
                1. Examples in Functional Languages
                  1. Type Checking at Compile Time vs. Runtime
                  2. Strong vs. Weak Typing
                    1. Type Enforcement
                      1. Type Coercion
                        1. Type Safety Guarantees
                        2. Type Inference
                          1. Definition and Mechanism
                            1. Benefits and Limitations
                              1. Hindley-Milner Type System
                                1. Local vs. Global Type Inference
                                2. Algebraic Data Types
                                  1. Product Types
                                    1. Tuples
                                      1. Records
                                        1. Structs
                                        2. Sum Types
                                          1. Tagged Unions
                                            1. Enums
                                              1. Variant Types
                                              2. Recursive Types
                                                1. Lists
                                                  1. Trees
                                                    1. Mutually Recursive Types
                                                    2. Phantom Types
                                                      1. Generalized Algebraic Data Types
                                                      2. Pattern Matching
                                                        1. Deconstructing Data Types
                                                          1. Matching on Product Types
                                                            1. Matching on Sum Types
                                                              1. Exhaustiveness Checking
                                                                1. Guards and Conditional Patterns
                                                                  1. Nested Patterns
                                                                    1. Pattern Matching vs. Conditionals
                                                                    2. Polymorphism
                                                                      1. Parametric Polymorphism
                                                                        1. Generic Types
                                                                          1. Type Variables
                                                                            1. Quantification
                                                                            2. Ad-hoc Polymorphism
                                                                              1. Type Classes
                                                                                1. Interfaces
                                                                                  1. Overloading
                                                                                  2. Subtype Polymorphism
                                                                                  3. Type Classes and Traits
                                                                                    1. Definition and Usage
                                                                                      1. Common Type Classes
                                                                                        1. Eq
                                                                                          1. Ord
                                                                                            1. Show
                                                                                              1. Functor
                                                                                                1. Applicative
                                                                                                  1. Monad
                                                                                                  2. Implementing Type Classes
                                                                                                    1. Type Class Hierarchies
                                                                                                      1. Coherence and Orphan Instances