Haskell Fundamentals
Expressions and Reduction
- Function evaluation and expressions (2018 Q1a, 2017 Q1a)
- List comprehension expressions (2018 Q1c)
- Fold expressions (2017 Q1b)
Functions and Equations
- Function definitions (2019 Q1a, 2020 Q1c)
- Recursive function definitions (2017 Q1d, 2018 Q2d)
- Point-free definitions (2017 Q1e)
Lists and List Comprehensions
- Infinite lists (2021 Q2a, 2021 Q2f)
- List comprehensions (2018 Q1c)
- List processing with
map, filter, etc. (2018 Q2c)
Algebraic Data Types
- Basic ADT definitions (2023 Q1a, 2018 Q3a, 2019 Q3a)
- Records and field accessors (2023 Q1a)
- Type classes (2018 Q2b, 2017 Q3c)
Pattern Matching and Recursion
- Pattern matching with lists (2017 Q1d)
- Pattern matching with ADTs (2018 Q3a, 2018 Q3b)
- Recursive data types (2022 Q2a, 2022 Q2b)
Higher-Order Functions
- Definition and purpose (2020 Q1a, 2021 Q1a)
map, filter, fold (2017 Q1a-b, 2020 Q1b)
- Function composition (2019 Q2a, 2021 Q1c-d)
twice and other function applications (2020 Q1c-d, 2021 Q1c)
Property-Based Testing
- QuickCheck properties (2021 Q2c, 2017 Q3c)
- Testing function properties (2021 Q1f, 2024 Q1b)
Evaluation Strategies
- Lazy evaluation (2021 Q2b, 2021 Q2f)
- Bottom values (2019 Q1e)
- Strictness (2021 Q2b)
Polymorphism
- Parametric polymorphism (2021 Q1a, 2022 Q1a)
- Type variables (2019 Q1b, 2020 Q1c-d)
- Type constraints (2022 Q1a, 2022 Q2b)
Monads and Side-effects
Introduction to IO
- IO basics (2021 Q3b, 2021 Q3d)
- Side effects (2021 Q3c)
Monads Basics
- Monad definition (2020 Q3a, 2022 Q3a)
- Bind operator (>>=) (2020 Q3a, 2022 Q3a, 2017 Q2a)
- Return function (2022 Q3a)
- Do notation (2017 Q2b, 2021 Q3b)
Common Monads
- Maybe monad (2022 Q3b, 2022 Q3d, 2019 Q1b)
- Custom monads (2017 Q2b - PirateShip, 2022 Q3c - CouldBe)
- Either monad (2019 Q2d)
Monad Laws
- Left identity, Right identity, Associativity (2022 Q3b)
- Testing monad laws (2022 Q3b)
Parser Combinators
- No direct questions in the provided past papers
Advanced Concepts
Error Handling
- Maybe for safe functions (2019 Q3a, 2022 Q1b)
- Either for error reporting (2019 Q2d)
- Error handling in monadic code (2024 Q1d)
- Not directly covered in provided past papers
Functors and Applicatives
- Functor typeclass (2023 Q3a, 2023 Q3b, 2022 Q3a, 2018 Q2e)
- Functor laws (2023 Q3b)
- Implementing fmap (2023 Q3c, 2018 Q2f)
- Bifunctor (2023 Q3d)
Lambda Calculus
- Church numerals (2024 Q2c-g)
- Basic lambda expressions (2024 Q2a-b)
Equational Reasoning
- Not directly covered in provided past papers
Special Topics
Type Inference
- Type signatures (2019 Q2a-f)
- Typeclass constraints (2022 Q1a)
Type Classes
- Creating instances (2018 Q2b, 2017 Q3c)
- Custom typeclasses (2017 Q3c - Twistable)
- Semigroup/Monoid (2024 Q3a-c)
Data Structures
- Trees (2018 Q3a, 2017 Q3a-b)
- Dragons (2018 Q2)
- Dictionaries/Maps (2022 Q1b-d, 2020 Q2)
- Tower (2023 Q1)
- Email types (2021 Q3)
Practical Applications
- Email API (2021 Q3)
- Car registration (2018 Q3b)
- Grading systems (2019 Q3)
- Gameshow (2023 Q2)
- HTML data structures (2024 Q3b)
Specific Question Types
Implementation Questions
- Implementing specific functions (2020 Q1c-d, 2017 Q3a-b)
- Implementing typeclasses (2017 Q3c, 2018 Q2b)
Theoretical Questions
- Function properties (2017 Q1c)
- Haskell features (2021 Q2b, 2021 Q1a)
Design Questions
- Data structure design (2022 Q1d, 2018 Q3b)
- API design (2021 Q3)