<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>