<div dir="auto">Dear Jacques,<div dir="auto"><br></div><div dir="auto">You may be interested in browsing through the table of contents (and maybe the actual contents) of the Haskell in Depth book by Vitaly Bragilevsky </div><div dir="auto"><a href="https://www.manning.com/books/haskell-in-depth">https://www.manning.com/books/haskell-in-depth</a></div><div dir="auto">It will soon be out from Manning (currently finishing the preview phase called MEAP). It has a good selection of "advanced" topics (including ones you mentioned) supported by a set of interesting projects.</div><div dir="auto"><br></div><div dir="auto">--</div><div dir="auto">Kind regards,</div><div dir="auto">Artem </div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Wed, Dec 16, 2020, 10:22 PM 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>