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)

Monad Transformers

  • 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)