
I will be teaching a second Haskell course next semester. Let's assume that Introducing functional programming Getting started with Haskell and GHCi Basic types and definitions Designing and writing programs Data types, tuples and lists Programming with lists Defining functions over lists Playing the game: I/O in Haskell Reasoning about programs Generalization: patterns of computation Higher-order functions Developing higher-order programs Overloading, type classes and type checking Algebraic types (i.e. the first chapters of Thompson's Haskell: the Craft of Functional Programming book is "beginner, classic Haskell". The next few chapters, namely Abstract data types Lazy programming Programming with monads Domain-Specific Languages Time and space behaviour would be (re)done at the start of such a second course. The question for cafe is: what else? I will likely cover: - Typeclassopedia - finally tagless - Template Haskell - Optics - GADTs - recursion schemes I should probably cover parser combinators, pretty-printing, cabal&stack. I know that http://dev.stephendiehl.com/hask/ http://dev.stephendiehl.com/hask/ gives me one heck of a smorgasbord of options, which is kind of a problem. Things I know I will not cover: - dependent types (if I was going to do that, I'd switch to Idris/Agda) - concurrency (don't ask) Jacques