<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="Generator" content="Microsoft Word 15 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:ArialMT;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
span.EmailStyle19
        {mso-style-type:personal-reply;
        font-family:"Calibri",sans-serif;
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-family:"Calibri",sans-serif;
        mso-fareast-language:EN-US;}
@page WordSection1
        {size:612.0pt 792.0pt;
        margin:72.0pt 72.0pt 72.0pt 72.0pt;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang="EN-CA" link="blue" vlink="purple" style="word-wrap:break-word">
<div class="WordSection1">
<p class="MsoNormal"><span style="mso-fareast-language:EN-US">Excellent question. I am not focused on any project/applications in particular. I do have a personal bias towards “languages” and processing of them. Haskell really excels at that.  I’m getting the
 students in my *<b>grad</b>* class (on generative programming) to do partial evaluators using finally tagless the way “it should have been done” in the paper, if we’d been all-knowing 10 years ago
</span><span style="font-family:"Segoe UI Emoji",sans-serif;mso-fareast-language:EN-US">😉</span><span style="mso-fareast-language:EN-US"> .  I don’t think we’ll get to that in the undergrad class. Maybe as bonus questions.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="mso-fareast-language:EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="mso-fareast-language:EN-US">Thanks for the timely reminder to try extra-hard to put all the features in context. My background being Pure Math (long ago), that sometimes leads me to forget that abstraction for abstraction’s
 sake isn’t everyone’s cup of tea!<o:p></o:p></span></p>
<p class="MsoNormal"><span style="mso-fareast-language:EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="mso-fareast-language:EN-US">Certainly things like you mention are excellent topics that fits well with the kinds of programs that I like to write, and that Haskell is fairly well suited for (I’m become an Agda fanboy, so it
 feels like I’m really slumming it by coding in Haskell, even worse when I’m working in my metaocaml code base).<o:p></o:p></span></p>
<p class="MsoNormal"><span style="mso-fareast-language:EN-US"><o:p> </o:p></span></p>
<div style="border:none;border-left:solid blue 1.5pt;padding:0cm 0cm 0cm 4.0pt">
<div>
<div style="border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0cm 0cm 0cm">
<p class="MsoNormal"><b><span lang="EN-US">From:</span></b><span lang="EN-US"> Tikhon Jelvis <tikhon@jelv.is>
<br>
<b>Sent:</b> December 16, 2020 10:42 PM<br>
<b>To:</b> Carette, Jacques <carette@mcmaster.ca><br>
<b>Cc:</b> haskell-cafe <haskell-cafe@haskell.org><br>
<b>Subject:</b> Re: [Haskell-cafe] Intermediate Modern Haskell<o:p></o:p></span></p>
</div>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<div>
<p class="MsoNormal">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?<o:p></o:p></p>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">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.<o:p></o:p></p>
</div>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<div>
<div>
<p class="MsoNormal">On Wed, Dec 16, 2020, 19:22 Jacques Carette <<a href="mailto:carette@mcmaster.ca">carette@mcmaster.ca</a>> wrote:<o:p></o:p></p>
</div>
<blockquote style="border:none;border-left:solid #CCCCCC 1.0pt;padding:0cm 0cm 0cm 6.0pt;margin-left:4.8pt;margin-right:0cm">
<div>
<p>I will be teaching a second Haskell course next semester.  Let's assume that<o:p></o:p></p>
<p style="margin:0cm;line-height:15.0pt;background:white;opacity:1;word-spacing:0px">
<span style="font-size:11.5pt;font-family:ArialMT;color:#584D4D">Introducing functional programming<o:p></o:p></span></p>
<p style="margin:0cm;line-height:15.0pt;background:white;opacity:1;word-spacing:0px">
<span style="font-size:11.5pt;font-family:ArialMT;color:#584D4D">Getting started with Haskell and GHCi<o:p></o:p></span></p>
<p style="margin:0cm;line-height:15.0pt;background:white;opacity:1;word-spacing:0px">
<span style="font-size:11.5pt;font-family:ArialMT;color:#584D4D">Basic types and definitions<o:p></o:p></span></p>
<p style="margin:0cm;line-height:15.0pt;background:white;opacity:1;word-spacing:0px">
<span style="font-size:11.5pt;font-family:ArialMT;color:#584D4D">Designing and writing programs<o:p></o:p></span></p>
<p style="margin:0cm;line-height:15.0pt;background:white;opacity:1;word-spacing:0px">
<span style="font-size:11.5pt;font-family:ArialMT;color:#584D4D">Data types, tuples and lists<o:p></o:p></span></p>
<p style="margin:0cm;line-height:15.0pt;background:white;opacity:1;word-spacing:0px">
<span style="font-size:11.5pt;font-family:ArialMT;color:#584D4D">Programming with lists<o:p></o:p></span></p>
<p style="margin:0cm;line-height:15.0pt;background:white;opacity:1;word-spacing:0px">
<span style="font-size:11.5pt;font-family:ArialMT;color:#584D4D">Defining functions over lists<o:p></o:p></span></p>
<p style="margin:0cm;line-height:15.0pt;background:white;opacity:1;word-spacing:0px">
<span style="font-size:11.5pt;font-family:ArialMT;color:#584D4D">Playing the game: I/O in Haskell<o:p></o:p></span></p>
<p style="margin:0cm;line-height:15.0pt;background:white;opacity:1;word-spacing:0px">
<span style="font-size:11.5pt;font-family:ArialMT;color:#584D4D">Reasoning about programs<o:p></o:p></span></p>
<p style="margin:0cm;line-height:15.0pt;background:white;opacity:1;word-spacing:0px">
<span style="font-size:11.5pt;font-family:ArialMT;color:#584D4D">Generalization: patterns of computation<o:p></o:p></span></p>
<p style="margin:0cm;line-height:15.0pt;background:white;opacity:1;word-spacing:0px">
<span style="font-size:11.5pt;font-family:ArialMT;color:#584D4D">Higher-order functions<o:p></o:p></span></p>
<p style="margin:0cm;line-height:15.0pt;background:white;opacity:1;word-spacing:0px">
<span style="font-size:11.5pt;font-family:ArialMT;color:#584D4D">Developing higher-order programs<o:p></o:p></span></p>
<p style="margin:0cm;line-height:15.0pt;background:white;opacity:1;word-spacing:0px">
<span style="font-size:11.5pt;font-family:ArialMT;color:#584D4D">Overloading, type classes and type checking<o:p></o:p></span></p>
<p style="margin:0cm;line-height:15.0pt;background:white;opacity:1;word-spacing:0px">
<span style="font-size:11.5pt;font-family:ArialMT;color:#584D4D">Algebraic types<o:p></o:p></span></p>
<p style="margin:0cm;line-height:15.0pt;background:white;opacity:1;word-spacing:0px">
<span style="font-size:11.5pt;font-family:ArialMT;color:#584D4D"><o:p> </o:p></span></p>
<p style="margin:0cm;line-height:15.0pt;background:white;opacity:1;word-spacing:0px">
<span style="font-size:11.5pt;font-family:ArialMT;color:#584D4D">(i.e. the first chapters of Thompson's Haskell: the Craft of Functional Programming book is "beginner, classic Haskell".  The next few chapters, namely<o:p></o:p></span></p>
<p style="margin:0cm;line-height:15.0pt;background:white;opacity:1;word-spacing:0px">
<span style="font-size:11.5pt;font-family:ArialMT;color:#584D4D">Abstract data types<o:p></o:p></span></p>
<p style="margin:0cm;line-height:15.0pt;background:white;opacity:1;word-spacing:0px">
<span style="font-size:11.5pt;font-family:ArialMT;color:#584D4D">Lazy programming<o:p></o:p></span></p>
<p style="margin:0cm;line-height:15.0pt;background:white;opacity:1;word-spacing:0px">
<span style="font-size:11.5pt;font-family:ArialMT;color:#584D4D">Programming with monads<o:p></o:p></span></p>
<p style="margin:0cm;line-height:15.0pt;background:white;opacity:1;word-spacing:0px">
<span style="font-size:11.5pt;font-family:ArialMT;color:#584D4D">Domain-Specific Languages<o:p></o:p></span></p>
<p style="margin:0cm;line-height:15.0pt;background:white;opacity:1;word-spacing:0px">
<span style="font-size:11.5pt;font-family:ArialMT;color:#584D4D">Time and space behaviour<o:p></o:p></span></p>
<p style="margin:0cm;line-height:15.0pt;background:white;opacity:1;word-spacing:0px">
<span style="font-size:11.5pt;font-family:ArialMT;color:#584D4D"><o:p> </o:p></span></p>
<p style="margin:0cm;line-height:15.0pt;background:white;opacity:1;word-spacing:0px">
<span style="font-size:11.5pt;font-family:ArialMT;color:#584D4D">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<o:p></o:p></span></p>
<p style="margin:0cm;line-height:15.0pt;background:white;opacity:1;word-spacing:0px">
<span style="font-size:11.5pt;font-family:ArialMT;color:#584D4D"><o:p> </o:p></span></p>
<p style="margin:0cm;line-height:15.0pt;background:white;opacity:1;word-spacing:0px">
<span style="font-size:11.5pt;font-family:ArialMT;color:#584D4D">I should probably cover parser combinators, pretty-printing, cabal&stack. I know that
<a href="http://dev.stephendiehl.com/hask/" target="_blank">http://dev.stephendiehl.com/hask/</a> gives me one heck of a smorgasbord of options, which is kind of a problem.<o:p></o:p></span></p>
<p style="margin:0cm;line-height:15.0pt;background:white;opacity:1;word-spacing:0px">
<span style="font-size:11.5pt;font-family:ArialMT;color:#584D4D"><o:p> </o:p></span></p>
<p style="margin:0cm;line-height:15.0pt;background:white;opacity:1;word-spacing:0px">
<span style="font-size:11.5pt;font-family:ArialMT;color:#584D4D">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)<o:p></o:p></span></p>
<p style="margin:0cm;line-height:15.0pt;background:white;opacity:1;word-spacing:0px">
<span style="font-size:11.5pt;font-family:ArialMT;color:#584D4D"><o:p> </o:p></span></p>
<p style="margin:0cm;line-height:15.0pt;background:white;opacity:1;word-spacing:0px">
<span style="font-size:11.5pt;font-family:ArialMT;color:#584D4D">Jacques<o:p></o:p></span></p>
</div>
<p class="MsoNormal">_______________________________________________<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" 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.<o:p></o:p></p>
</blockquote>
</div>
</div>
</div>
</body>
</html>