A paradigm shift from imperative to declarative programming — Haskell first, then formal verification with dependently-typed Agda.
Download course · 14 MBWas CSE3100, a Year-3 elective. Remains an elective.
map, filter, fold)IO, State; lazy evaluation and infinite data structuresVec, Fin), the Curry-Howard correspondence, equational reasoning and formal proofs of program propertiesCourse project (35%) + final written exam (65%); each ≥5.0, final grade ≥5.8. The project is typically a Haskell application (e.g. a jq clone) synthesizing ADTs, parsing, and monadic structuring. The exam mixes Haskell and Agda: theory questions, implementing Functor/Applicative/Monad instances for a given type, QuickCheck property tests, evaluation-strategy tracing, plus three dedicated Agda questions (dependent types, Curry-Howard proof, equational reasoning).
Exams.md for exam-style questions.Type Class → Functor → Applicative → Monad chain is strictly cumulative: a shaky grasp of higher-order functions early on will make Monads incomprehensible later. Don't cram this course.