<div dir="auto">What kind of projects and applications are you focused on? In my experience, the difficulty in learning—and teaching—"advanced" Haskell topics is less in the topic itself and more in the level of abstraction involved. I know that I struggled with GADTs and even existential types not because of the features themselves but because I had real trouble putting the features into context and understanding how I would use them. Just *why* are those abstractions in particular interesting?<div dir="auto"><br></div><div dir="auto">I can recommend some of my personal favorite topics like streaming libraries, FRP, automatic differentiation and the probability monad, but whether that recommendation makes sense depends on how you want to use those topics. Alternatively, if you have some specific things you would want to build with the class, we could suggest topics that fit those goals.</div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Wed, Dec 16, 2020, 19:22 Jacques Carette <<a href="mailto:carette@mcmaster.ca">carette@mcmaster.ca</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

  
  <div>
    <p>I will be teaching a second Haskell course next semester.  Let's
      assume that</p>
    <p 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;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255)">Introducing functional programming<br>
    </p>
    <p 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;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255)">Getting started with Haskell and GHCi<br>
    </p>
    <p 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;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255)">Basic types and definitions<br>
    </p>
    <p 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;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255)">Designing and writing programs<br>
    </p>
    <p 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;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255)">Data types, tuples and lists<br>
    </p>
    <p 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;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255)">Programming with lists<br>
    </p>
    <p 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;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255)">Defining functions over lists<br>
    </p>
    <p 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;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255)">Playing the game: I/O in Haskell<br>
    </p>
    <p 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;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255)">Reasoning about programs<br>
    </p>
    <p 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;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255)">Generalization: patterns of computation<br>
    </p>
    <p 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;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255)">Higher-order functions</p>
    <p 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;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255)">Developing higher-order programs<br>
    </p>
    <p 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;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255)">Overloading, type classes and type checking<br>
    </p>
    <p 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;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255)">Algebraic types</p>
    <p 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;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255)"><br>
    </p>
    <p 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;white-space:normal;word-spacing: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 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;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255)">Abstract data types<br>
    </p>
    <p 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;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255)">Lazy programming<br>
    </p>
    <p 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;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255)">Programming with monads<br>
    </p>
    <p 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;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255)">Domain-Specific Languages<br>
    </p>
    <p 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;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255)">Time and space behaviour</p>
    <p 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;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255)"><br>
    </p>
    <p 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;white-space:normal;word-spacing: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 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;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255)"><br>
    </p>
    <p 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;white-space:normal;word-spacing: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/" target="_blank" rel="noreferrer">http://dev.stephendiehl.com/hask/</a>
      gives me one heck of a smorgasbord of options, which is kind of a
      problem.</p>
    <p 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;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255)"><br>
    </p>
    <p 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;white-space:normal;word-spacing: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 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;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255)"><br>
    </p>
    <p 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;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255)">Jacques<br>
    </p>
  </div>

_______________________________________________<br>
Haskell-Cafe mailing list<br>
To (un)subscribe, modify options or view archives go to:<br>
<a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe" rel="noreferrer noreferrer" target="_blank">http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe</a><br>
Only members subscribed via the mailman list are allowed to post.</blockquote></div>