Dan Grossman wrote an excellent set of reading notes to accompany previous offerings of this course. Please note that the material covered by these notes does not exactly align with the material we are covering this quarter. In particular, the notes for Unit 4 onwards use Racket instead of OCaml. However, we still think they're a fantastic resource so we wanted to make them available:
Unit 1: Functions, Tuples, Lists, and More
Unit 2: Variants, Pattern Matching, Tail Recursion, and More
Unit 3: First-Class Functions and Closures
Unit 4: Modules, Type Inference, Equivalence
Unit 5: Racket, Delayed Evaluation, Macros
Unit 6: Structs, Implementing Programming Languages