Intersect Committees
Intersect Knowledge BaseIntersect Website
Intersect - Open Source Committee
Intersect - Open Source Committee
  • ABOUT
    • Open Source Committee (OSC)
      • πŸ™‚Open Source Committee Charter
      • Committee Members
      • Open Source Committee 2025 Proposals
      • OSC Communications
      • OSC Engagement
      • How to Join or Contact Us?
    • 🀠Open Source Office (OSO)
      • πŸ˜›2025 OSO Roadmap
        • 😍2024 OSO Roadmap (Archive)
      • 😲Developer Advocate Program
        • State of Developer Experience Survey
        • Developer Advocate Cohort #1
      • 😎Strategic Partnerships
        • πŸ§‘β€πŸ«TODO Group
        • πŸ—οΈLinux Foundation Decentralized Trust (LFDT, prevousliy Hyperledger)
        • πŸ¦‰Bitergia Analytics
      • πŸ‘¨β€πŸ«Project Support Services
      • πŸ“ŠCardano’s Decentralized Shift: Key Players and Impact
      • πŸ“ˆCurrent Monthly Maturity Report
      • πŸ˜‰True Open Source Maturity Pilot
      • πŸ“œIntersecting Open Source and Sustainability: A Paid Open Source Model for Ecosystems
    • 🀩Open Source Strategy
  • πŸ“šGuides and Educational Resources
    • πŸšΆβ€β™‚οΈHitchhiker's Guide to Cardano
    • 🀯Onboarding Guide for Haskell Learners
    • πŸŽ“Functional Programming in Haskell
    • πŸ§‘β€πŸŽ“Advanced Functional Programming in Haskell
    • 😁Onboarding Guide for Rust Learners
    • πŸ˜‰Onboarding Guide for Aiken Learners
    • πŸ˜…Onboarding Guide for Nix Learners
  • Working Groups
    • Developer Experience Working Group
    • Commercialization Working Group
      • SWOT Analysis
    • OSC Working Group Archive
      • Project Incubation WG (Archive)
      • Open Source Libraries Working Group
  • Policies
    • Introduction
    • πŸ“œGovernance Policy
      • Documentation
      • Legal
      • Glossary
    • πŸ”Security Policy
    • πŸͺœContribution Ladder Framework
    • πŸ˜‹Project Incubation Lifecycle Framework
      • πŸ₯ΉProject Incubation: Acceptance Criteria
    • βœ…OSC Voting Policy
      • OSC Off-Cycle Vote 09.2024
  • OSC Meeting Minutes
    • Open Source Committee Meeting Minutes
      • 2024 Meeting Minutes
        • 😁(12/15/23) Meeting Minutes
        • πŸ˜†(01/12/24) Meeting Minutes
        • 😊(01/26/24) Meeting Minutes
        • πŸ˜‰(02/02/24) Meeting Minutes
        • 😎(02/16/24) Meeting Minutes
        • πŸ₯Ή(02/23/24) Meeting Minutes
        • 😍(03/01/2024) Meeting Minutes
        • 🫠(03/08/2024) Meeting Minutes
        • πŸ₯Ή(03/15/2024) Meeting Minutes
        • πŸ˜…(03/22/2024) Meeting Minutes
        • πŸ˜†(03/28/2024) Meeting Minutes
        • 😁(04/12/2024) Meeting Minutes
        • πŸ˜›(04/19/2024) Meeting Minutes
        • πŸ€“(04/26/2024) Meeting Minutes
        • πŸ₯Έ(05/03/2024) Meeting Minute
        • 😏(05/17/2024) Meeting Minutes
        • 🫨(06/07/2024) Meeting Minutes
        • 🀩(06/21/2024) Meeting Minutes
        • 😌(07/12/2024) Meeting Minutes
        • 😎(07/19/2024) Meeting Minutes
        • 🀐(08/02/2024) Meeting Minutes
        • πŸ™ƒ(08/08/2024) Meeting Minutes
        • 🀠(08/22/2024) Meeting Minutes
        • 😡(09/05/2024) Meeting Minutes
        • πŸ§”(09/20/2024) Meeting Minutes
        • πŸ‘‹(10/03/2024) Meeting Minutes
        • πŸ™ƒ(10/31/2024) Meeting Minutes
        • 🀀(11/07/2024) Meeting Minutes
        • πŸ˜›(11/14/2024) Meeting Minutes
        • πŸ˜…(12/12/2024) Meeting Minutes
        • πŸ˜‰(12/19/2024) Meeting Minutes
      • πŸ™‚(01/09/2025) Meeting Minutes
      • πŸ˜‰(01/16/2025) Meeting Minutes
      • πŸ™‚(01/23/2025) Meeting Minutes
      • πŸ˜‰(02/06/2025) Meeting Minutes
      • πŸ€“(02/20/2025) Meeting Minutes
      • πŸ˜†(03/06/2025) Meeting Minutes
      • πŸ™ƒ(03/20/2025) Meeting Minutes
      • 🫒(04/03/2025) Meeting Minutes
      • πŸ˜…(04/17/2025) Meeting Minutes
      • πŸ™ƒ(05/01/2025) Meeting Minutes
      • 🀭(05/15/2025) Meeting Minutes
      • πŸ˜›(05/29/2025) Meeting Minutes
      • πŸ₯³(06/12/2025) Meeting Minutes
  • All Monthly Reports
    • Bitergia Repo Maturity Reports
      • Monthly Maturity Reports - 2025
        • Monthly Maturity Report - January 2025
        • Monthly Maturity Report - February 2025
        • Monthly Maturity Report - March 2025
        • Monthly Maturity Report - April 2025
        • Monthly Maturity Report- May 2025
      • Monthly Maturity Reports - 2024
        • Monthly Maturity Report - May 2024
        • Monthly Maturity Report - June 2024
        • Monthly Maturity Report - July 2024
        • Monthly Maturity Report - August 2024
        • Monthly Maturity Report - September 2024
        • Monthly Maturity Report - October 2024
        • Monthly Maturity Report - November 2024
        • Monthly Maturity Report - December 2024
Powered by GitBook
On this page
  • πŸ—‚οΈ Lecture Topics
  • πŸ”§ Step-by-Step Learning Path
  • πŸ’‘ Best Practices
  • 🌱 After This Course
  • Lectures
  • Resources
  1. Guides and Educational Resources

Advanced Functional Programming in Haskell

This page is based off the teachings of Professor Graham Hutton, University of Nottingham. He has approved the creation of this page and usage of his resources.

PreviousFunctional Programming in HaskellNextOnboarding Guide for Rust Learners

Last updated 1 day ago

This is an advanced course on functional programming in Haskell. It is designed for second year computing students in Nottingham, but the lectures are also made available on .

The course is based on part II of . It is recommended for following the course, to purchase the below textbook, watch the youtube videos, slides are provided below to follow along, and then to try out to programming examples with resources below as well. All resources and links are provided at the bottom of the page. All credit goes to the , University of Nottingham

πŸ—‚οΈ Lecture Topics

The course expands beyond the basics into advanced patterns, type classes, and program reasoning. Key lectures include:

  1. Course Overview 2–4. Sudoku Solver Series – Building and optimizing a Sudoku solver in Haskell 5–6. Functors & Applicative Functors 7–10. Monads – From basic introduction to generic laws and use cases (Maybe, List, State) 11–12. Program Reasoning & Induction 13–15. Performance & Compiler Correctness – Techniques like fast reverse/flatten and verifying compiler behavior

Plus: YouTube playlists, overview slides, Sudoku solver code, and full standard prelude reference


πŸ”§ Step-by-Step Learning Path

βœ… Step 1: Explore the AFP Page

Use it as your central hub for videos, slides, and example code.


βœ… Step 2: Follow Lecture Sequence

Watch in orderβ€”each builds on the previous one:

  • Lectures 2–4: Code a Sudoku solver from scratch, iteratively improving performance

  • Lectures 5–10: Deep dive into functors, applicatives, and monadsβ€”including real-world monad usage in Haskell

  • Lectures 11–12: Learn how to formally reason and prove properties about functional programs

  • Lectures 13–15: Tackle efficiency (e.g., removing append overhead) and understand compiler verification


βœ… Step 3: Read Programming in Haskell (Part II)

Highly aligns with the course. Reading alongside lectures reinforces:

  • Category-theoretic intuition behind functors/applicatives/monads

  • Inductive proofs and reasoning

  • Lazy evaluation optimizations


βœ… Step 4: Code Along & Experiment

  • Download and run the Sudoku solver code provided

  • Tinker with functor/applicative/monad instancesβ€”maybe create a small parsing program or build a custom monad

  • Implement the "fast reverse" or "fast flatten" strategies using difference lists

  • Walk through the compiler correctness lecture by experimenting with simple interpreters or compiling toy expressions


βœ… Step 5: Reason & Prove

  • Use induction and reasoning techniques shown in lectures 11–12 to validate your programs

  • Explore equational reasoning (e.g., proving map fusion or monad laws)


πŸ›  Tools You’ll Need

  • Editor – VS Code with Haskell extensions, or your preferred Haskell IDE

  • Hoogle – invaluable for searching type signatures and library functions

  • YouTube – study at your pace; pause and rewind where needed


πŸ’‘ Best Practices

  • Type everything by hand even if slides include code

  • Pause frequently during monad sectionsβ€”these can be non-trivial

  • When reasoning, write proofs step-by-step in your notes or code comments

  • Use Git to version control your solutions (especially for the Sudoku solver or monad experiments)


🌱 After This Course

Advanced topics you’ll be ready for next:

  • Category theory applied to Haskell (e.g., Profunctors, Arrows)

  • Concurrency and streaming libraries (e.g. Conduit, STM)

  • Formal verification tools (e.g., Liquid Haskell, Agda)

Lectures

Additional material:

Resources

GHC – install via

()

(internal version of this page)

(for all things Haskell)

(the Glasgow Haskell Compiler)

(for searching the libraries)

πŸ“š
πŸ§‘β€πŸŽ“
YouTube
Programming in Haskell
Graham Hutton
people.cs.nott.ac.uk
people.cs.nott.ac.uk
haskell.org
Course Overview
Sudoku I: First Steps
Sudoku II: Initial Solvers
Sudoku III: Improving Performance
Functors
Applicative Functors
Monads I: Basic Concepts
Monads II: Maybe, List and State
Monads III: State Revisited
Monads IV: Generics, Laws and Benefits
Reasoning About Programs
Induction
Making Append Vanish: Fast Reverse
Making Append Vanish II: Fast Flatten
Compiler Correctness
YouTube playlist
Overview slides
Review of Haskell
Sudoku code
slides
Standard prelude
Course moodle page
Haskell home page
GHC
Hoogle