<html><head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  </head>
  <body>
    <p>I will be teaching a second Haskell course next semester.  Let's
      assume that</p>
    <p class="Body" style="color: rgb(88, 77, 77); font: 400 15px / 20px
      ArialMT, Arial, sans-serif; letter-spacing: normal; margin: 0px;
      opacity: 1; padding-bottom: 0px; padding-top: 0px; text-align:
      left; text-decoration: none; text-indent: 0px; text-transform:
      none; orphans: 2; white-space: normal; widows: 2; word-spacing:
      0px; -webkit-text-stroke-width: 0px; background-color: rgb(255,
      255, 255);">Introducing functional programming<br>
    </p>
    <p class="Body" style="color: rgb(88, 77, 77); font: 400 15px / 20px
      ArialMT, Arial, sans-serif; letter-spacing: normal; margin: 0px;
      opacity: 1; padding-bottom: 0px; padding-top: 0px; text-align:
      left; text-decoration: none; text-indent: 0px; text-transform:
      none; orphans: 2; white-space: normal; widows: 2; word-spacing:
      0px; -webkit-text-stroke-width: 0px; background-color: rgb(255,
      255, 255);">Getting started with Haskell and GHCi<br>
    </p>
    <p class="Body" style="color: rgb(88, 77, 77); font: 400 15px / 20px
      ArialMT, Arial, sans-serif; letter-spacing: normal; margin: 0px;
      opacity: 1; padding-bottom: 0px; padding-top: 0px; text-align:
      left; text-decoration: none; text-indent: 0px; text-transform:
      none; orphans: 2; white-space: normal; widows: 2; word-spacing:
      0px; -webkit-text-stroke-width: 0px; background-color: rgb(255,
      255, 255);">Basic types and definitions<br>
    </p>
    <p class="Body" style="color: rgb(88, 77, 77); font: 400 15px / 20px
      ArialMT, Arial, sans-serif; letter-spacing: normal; margin: 0px;
      opacity: 1; padding-bottom: 0px; padding-top: 0px; text-align:
      left; text-decoration: none; text-indent: 0px; text-transform:
      none; orphans: 2; white-space: normal; widows: 2; word-spacing:
      0px; -webkit-text-stroke-width: 0px; background-color: rgb(255,
      255, 255);">Designing and writing programs<br>
    </p>
    <p class="Body" style="color: rgb(88, 77, 77); font: 400 15px / 20px
      ArialMT, Arial, sans-serif; letter-spacing: normal; margin: 0px;
      opacity: 1; padding-bottom: 0px; padding-top: 0px; text-align:
      left; text-decoration: none; text-indent: 0px; text-transform:
      none; orphans: 2; white-space: normal; widows: 2; word-spacing:
      0px; -webkit-text-stroke-width: 0px; background-color: rgb(255,
      255, 255);">Data types, tuples and lists<br>
    </p>
    <p class="Body" style="color: rgb(88, 77, 77); font: 400 15px / 20px
      ArialMT, Arial, sans-serif; letter-spacing: normal; margin: 0px;
      opacity: 1; padding-bottom: 0px; padding-top: 0px; text-align:
      left; text-decoration: none; text-indent: 0px; text-transform:
      none; orphans: 2; white-space: normal; widows: 2; word-spacing:
      0px; -webkit-text-stroke-width: 0px; background-color: rgb(255,
      255, 255);">Programming with lists<br>
    </p>
    <p class="Body" style="color: rgb(88, 77, 77); font: 400 15px / 20px
      ArialMT, Arial, sans-serif; letter-spacing: normal; margin: 0px;
      opacity: 1; padding-bottom: 0px; padding-top: 0px; text-align:
      left; text-decoration: none; text-indent: 0px; text-transform:
      none; orphans: 2; white-space: normal; widows: 2; word-spacing:
      0px; -webkit-text-stroke-width: 0px; background-color: rgb(255,
      255, 255);">Defining functions over lists<br>
    </p>
    <p class="Body" style="color: rgb(88, 77, 77); font: 400 15px / 20px
      ArialMT, Arial, sans-serif; letter-spacing: normal; margin: 0px;
      opacity: 1; padding-bottom: 0px; padding-top: 0px; text-align:
      left; text-decoration: none; text-indent: 0px; text-transform:
      none; orphans: 2; white-space: normal; widows: 2; word-spacing:
      0px; -webkit-text-stroke-width: 0px; background-color: rgb(255,
      255, 255);">Playing the game: I/O in Haskell<br>
    </p>
    <p class="Body" style="color: rgb(88, 77, 77); font: 400 15px / 20px
      ArialMT, Arial, sans-serif; letter-spacing: normal; margin: 0px;
      opacity: 1; padding-bottom: 0px; padding-top: 0px; text-align:
      left; text-decoration: none; text-indent: 0px; text-transform:
      none; orphans: 2; white-space: normal; widows: 2; word-spacing:
      0px; -webkit-text-stroke-width: 0px; background-color: rgb(255,
      255, 255);">Reasoning about programs<br>
    </p>
    <p class="Body" style="color: rgb(88, 77, 77); font: 400 15px / 20px
      ArialMT, Arial, sans-serif; letter-spacing: normal; margin: 0px;
      opacity: 1; padding-bottom: 0px; padding-top: 0px; text-align:
      left; text-decoration: none; text-indent: 0px; text-transform:
      none; orphans: 2; white-space: normal; widows: 2; word-spacing:
      0px; -webkit-text-stroke-width: 0px; background-color: rgb(255,
      255, 255);">Generalization: patterns of computation<br>
    </p>
    <p class="Body" style="color: rgb(88, 77, 77); font: 400 15px / 20px
      ArialMT, Arial, sans-serif; letter-spacing: normal; margin: 0px;
      opacity: 1; padding-bottom: 0pt; padding-top: 0px; text-align:
      left; text-decoration: none; text-indent: 0px; text-transform:
      none; orphans: 2; white-space: normal; widows: 2; word-spacing:
      0px; -webkit-text-stroke-width: 0px; background-color: rgb(255,
      255, 255);">Higher-order functions</p>
    <p class="Body" style="color: rgb(88, 77, 77); font: 400 15px / 20px
      ArialMT, Arial, sans-serif; letter-spacing: normal; margin: 0px;
      opacity: 1; padding-bottom: 0px; padding-top: 0pt; text-align:
      left; text-decoration: none; text-indent: 0px; text-transform:
      none; orphans: 2; white-space: normal; widows: 2; word-spacing:
      0px; -webkit-text-stroke-width: 0px; background-color: rgb(255,
      255, 255);">Developing higher-order programs<br>
    </p>
    <p class="Body" style="color: rgb(88, 77, 77); font: 400 15px / 20px
      ArialMT, Arial, sans-serif; letter-spacing: normal; margin: 0px;
      opacity: 1; padding-bottom: 0px; padding-top: 0px; text-align:
      left; text-decoration: none; text-indent: 0px; text-transform:
      none; orphans: 2; white-space: normal; widows: 2; word-spacing:
      0px; -webkit-text-stroke-width: 0px; background-color: rgb(255,
      255, 255);">Overloading, type classes and type checking<br>
    </p>
    <p class="Body" style="color: rgb(88, 77, 77); font: 400 15px / 20px
      ArialMT, Arial, sans-serif; letter-spacing: normal; margin: 0px;
      opacity: 1; padding-bottom: 0px; padding-top: 0px; text-align:
      left; text-decoration: none; text-indent: 0px; text-transform:
      none; orphans: 2; white-space: normal; widows: 2; word-spacing:
      0px; -webkit-text-stroke-width: 0px; background-color: rgb(255,
      255, 255);">Algebraic types</p>
    <p class="Body" style="color: rgb(88, 77, 77); font: 400 15px / 20px
      ArialMT, Arial, sans-serif; letter-spacing: normal; margin: 0px;
      opacity: 1; padding-bottom: 0px; padding-top: 0px; text-align:
      left; text-decoration: none; text-indent: 0px; text-transform:
      none; orphans: 2; white-space: normal; widows: 2; word-spacing:
      0px; -webkit-text-stroke-width: 0px; background-color: rgb(255,
      255, 255);"><br>
    </p>
    <p class="Body" style="color: rgb(88, 77, 77); font: 400 15px / 20px
      ArialMT, Arial, sans-serif; letter-spacing: normal; margin: 0px;
      opacity: 1; padding-bottom: 0px; padding-top: 0px; text-align:
      left; text-decoration: none; text-indent: 0px; text-transform:
      none; orphans: 2; white-space: normal; widows: 2; word-spacing:
      0px; -webkit-text-stroke-width: 0px; background-color: rgb(255,
      255, 255);">(i.e. the first chapters of Thompson's Haskell: the
      Craft of Functional Programming book is "beginner, classic
      Haskell".  The next few chapters, namely</p>
    <p class="Body" style="color: rgb(88, 77, 77); font: 400 15px / 20px
      ArialMT, Arial, sans-serif; letter-spacing: normal; margin: 0px;
      opacity: 1; padding-bottom: 0px; padding-top: 0px; text-align:
      left; text-decoration: none; text-indent: 0px; text-transform:
      none; orphans: 2; white-space: normal; widows: 2; word-spacing:
      0px; -webkit-text-stroke-width: 0px; background-color: rgb(255,
      255, 255);">Abstract data types<br>
    </p>
    <p class="Body" style="color: rgb(88, 77, 77); font: 400 15px / 20px
      ArialMT, Arial, sans-serif; letter-spacing: normal; margin: 0px;
      opacity: 1; padding-bottom: 0px; padding-top: 0px; text-align:
      left; text-decoration: none; text-indent: 0px; text-transform:
      none; orphans: 2; white-space: normal; widows: 2; word-spacing:
      0px; -webkit-text-stroke-width: 0px; background-color: rgb(255,
      255, 255);">Lazy programming<br>
    </p>
    <p class="Body" style="color: rgb(88, 77, 77); font: 400 15px / 20px
      ArialMT, Arial, sans-serif; letter-spacing: normal; margin: 0px;
      opacity: 1; padding-bottom: 0px; padding-top: 0px; text-align:
      left; text-decoration: none; text-indent: 0px; text-transform:
      none; orphans: 2; white-space: normal; widows: 2; word-spacing:
      0px; -webkit-text-stroke-width: 0px; background-color: rgb(255,
      255, 255);">Programming with monads<br>
    </p>
    <p class="Body" style="color: rgb(88, 77, 77); font: 400 15px / 20px
      ArialMT, Arial, sans-serif; letter-spacing: normal; margin: 0px;
      opacity: 1; padding-bottom: 0px; padding-top: 0px; text-align:
      left; text-decoration: none; text-indent: 0px; text-transform:
      none; orphans: 2; white-space: normal; widows: 2; word-spacing:
      0px; -webkit-text-stroke-width: 0px; background-color: rgb(255,
      255, 255);">Domain-Specific Languages<br>
    </p>
    <p class="Body" style="color: rgb(88, 77, 77); font: 400 15px / 20px
      ArialMT, Arial, sans-serif; letter-spacing: normal; margin: 0px;
      opacity: 1; padding-bottom: 0px; padding-top: 0px; text-align:
      left; text-decoration: none; text-indent: 0px; text-transform:
      none; orphans: 2; white-space: normal; widows: 2; word-spacing:
      0px; -webkit-text-stroke-width: 0px; background-color: rgb(255,
      255, 255);">Time and space behaviour</p>
    <p class="Body" style="color: rgb(88, 77, 77); font: 400 15px / 20px
      ArialMT, Arial, sans-serif; letter-spacing: normal; margin: 0px;
      opacity: 1; padding-bottom: 0px; padding-top: 0px; text-align:
      left; text-decoration: none; text-indent: 0px; text-transform:
      none; orphans: 2; white-space: normal; widows: 2; word-spacing:
      0px; -webkit-text-stroke-width: 0px; background-color: rgb(255,
      255, 255);"><br>
    </p>
    <p class="Body" style="color: rgb(88, 77, 77); font: 400 15px / 20px
      ArialMT, Arial, sans-serif; letter-spacing: normal; margin: 0px;
      opacity: 1; padding-bottom: 0px; padding-top: 0px; text-align:
      left; text-decoration: none; text-indent: 0px; text-transform:
      none; orphans: 2; white-space: normal; widows: 2; word-spacing:
      0px; -webkit-text-stroke-width: 0px; background-color: rgb(255,
      255, 255);">would be (re)done at the start of such a second
      course. The question for cafe is: what else? I will likely cover:<br>
      - Typeclassopedia<br>
      - finally tagless<br>
      - Template Haskell<br>
      - Optics<br>
      - GADTs<br>
      - recursion schemes<br>
    </p>
    <p class="Body" style="color: rgb(88, 77, 77); font: 400 15px / 20px
      ArialMT, Arial, sans-serif; letter-spacing: normal; margin: 0px;
      opacity: 1; padding-bottom: 0px; padding-top: 0px; text-align:
      left; text-decoration: none; text-indent: 0px; text-transform:
      none; orphans: 2; white-space: normal; widows: 2; word-spacing:
      0px; -webkit-text-stroke-width: 0px; background-color: rgb(255,
      255, 255);"><br>
    </p>
    <p class="Body" style="color: rgb(88, 77, 77); font: 400 15px / 20px
      ArialMT, Arial, sans-serif; letter-spacing: normal; margin: 0px;
      opacity: 1; padding-bottom: 0px; padding-top: 0px; text-align:
      left; text-decoration: none; text-indent: 0px; text-transform:
      none; orphans: 2; white-space: normal; widows: 2; word-spacing:
      0px; -webkit-text-stroke-width: 0px; background-color: rgb(255,
      255, 255);">I should probably cover parser combinators,
      pretty-printing, cabal&stack. I know that <a href="http://dev.stephendiehl.com/hask/">http://dev.stephendiehl.com/hask/</a>
      gives me one heck of a smorgasbord of options, which is kind of a
      problem.</p>
    <p class="Body" style="color: rgb(88, 77, 77); font: 400 15px / 20px
      ArialMT, Arial, sans-serif; letter-spacing: normal; margin: 0px;
      opacity: 1; padding-bottom: 0px; padding-top: 0px; text-align:
      left; text-decoration: none; text-indent: 0px; text-transform:
      none; orphans: 2; white-space: normal; widows: 2; word-spacing:
      0px; -webkit-text-stroke-width: 0px; background-color: rgb(255,
      255, 255);"><br>
    </p>
    <p class="Body" style="color: rgb(88, 77, 77); font: 400 15px / 20px
      ArialMT, Arial, sans-serif; letter-spacing: normal; margin: 0px;
      opacity: 1; padding-bottom: 0px; padding-top: 0px; text-align:
      left; text-decoration: none; text-indent: 0px; text-transform:
      none; orphans: 2; white-space: normal; widows: 2; word-spacing:
      0px; -webkit-text-stroke-width: 0px; background-color: rgb(255,
      255, 255);">Things I know I will not cover:<br>
      - dependent types (if I was going to do that, I'd switch to
      Idris/Agda)<br>
      - concurrency (don't ask)</p>
    <p class="Body" style="color: rgb(88, 77, 77); font: 400 15px / 20px
      ArialMT, Arial, sans-serif; letter-spacing: normal; margin: 0px;
      opacity: 1; padding-bottom: 0px; padding-top: 0px; text-align:
      left; text-decoration: none; text-indent: 0px; text-transform:
      none; orphans: 2; white-space: normal; widows: 2; word-spacing:
      0px; -webkit-text-stroke-width: 0px; background-color: rgb(255,
      255, 255);"><br>
    </p>
    <p class="Body" style="color: rgb(88, 77, 77); font: 400 15px / 20px
      ArialMT, Arial, sans-serif; letter-spacing: normal; margin: 0px;
      opacity: 1; padding-bottom: 0px; padding-top: 0px; text-align:
      left; text-decoration: none; text-indent: 0px; text-transform:
      none; orphans: 2; white-space: normal; widows: 2; word-spacing:
      0px; -webkit-text-stroke-width: 0px; background-color: rgb(255,
      255, 255);">Jacques<br>
    </p>
  </body>
</html>