01Racket Fundamentals
DrRacket, programs and expressions, definitions, style, conditional expressions, compound data, modules, and testing.
02Haskell Fundamentals
Core data types, lists, tuples, operators, conditionals, functions, type classes, custom types, and type variables.
03Languages, Syntax & Semantics
Imperative and functional paradigms, side effects, purity, grammars, parse trees, abstract syntax trees, denotational semantics, and operational semantics.
04Lambda Calculus
Syntax, free and bound variables, beta-redexes, substitution, beta-reduction, and the relationship between lambda expressions and computation.
05Recursion & Pattern Matching
Recursive datatypes, structural recursion over lists, tail calls, tail-call optimization, pattern matching, and recursive problem solving.
06Higher-Order Functions
Map, filter, folds, composition, currying, partial evaluation, apply, closures, and functions that return functions.
07Scope & Evaluation
Global and local bindings, lexical and dynamic scope, strict and non-strict evaluation, delayed evaluation, and evaluation order in Racket and Haskell.
08Objects & Macros
Classes as higher-order functions, methods, self-reference, symbols, pattern-based macros, macro rules and ellipses, and AST-based transformations.
09Streams, Continuations & Backtracking
Lazy and infinite streams, generators, ambiguous and nondeterministic expressions, continuations, local mutation, choices, predicates, and backtracking.
10Type Systems
Strong and weak typing, static and dynamic typing, algebraic data types, parametric polymorphism, type classes, and ad-hoc polymorphism.
11Functors & Monads
Functorial mapping, Option, Either, and List as monads, failure representation, lifting, state, mutation in pure functional programs, and the IO monad.
12Functional Program Design
Constructing type-safe Racket and Haskell solutions while reasoning about correctness, abstraction, composition, and programming-language design.