Intermediate Modern Haskell

I will be teaching a second Haskell course next semester. Let's assume that Introducing functional programming Getting started with Haskell and GHCi Basic types and definitions Designing and writing programs Data types, tuples and lists Programming with lists Defining functions over lists Playing the game: I/O in Haskell Reasoning about programs Generalization: patterns of computation Higher-order functions Developing higher-order programs Overloading, type classes and type checking Algebraic types (i.e. the first chapters of Thompson's Haskell: the Craft of Functional Programming book is "beginner, classic Haskell". The next few chapters, namely Abstract data types Lazy programming Programming with monads Domain-Specific Languages Time and space behaviour would be (re)done at the start of such a second course. The question for cafe is: what else? I will likely cover: - Typeclassopedia - finally tagless - Template Haskell - Optics - GADTs - recursion schemes I should probably cover parser combinators, pretty-printing, cabal&stack. I know that http://dev.stephendiehl.com/hask/ http://dev.stephendiehl.com/hask/ gives me one heck of a smorgasbord of options, which is kind of a problem. Things I know I will not cover: - dependent types (if I was going to do that, I'd switch to Idris/Agda) - concurrency (don't ask) Jacques

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?
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.
On Wed, Dec 16, 2020, 19:22 Jacques Carette
I will be teaching a second Haskell course next semester. Let's assume that
Introducing functional programming
Getting started with Haskell and GHCi
Basic types and definitions
Designing and writing programs
Data types, tuples and lists
Programming with lists
Defining functions over lists
Playing the game: I/O in Haskell
Reasoning about programs
Generalization: patterns of computation
Higher-order functions
Developing higher-order programs
Overloading, type classes and type checking
Algebraic types
(i.e. the first chapters of Thompson's Haskell: the Craft of Functional Programming book is "beginner, classic Haskell". The next few chapters, namely
Abstract data types
Lazy programming
Programming with monads
Domain-Specific Languages
Time and space behaviour
would be (re)done at the start of such a second course. The question for cafe is: what else? I will likely cover: - Typeclassopedia - finally tagless - Template Haskell - Optics - GADTs - recursion schemes
I should probably cover parser combinators, pretty-printing, cabal&stack. I know that http://dev.stephendiehl.com/hask/ gives me one heck of a smorgasbord of options, which is kind of a problem.
Things I know I will not cover: - dependent types (if I was going to do that, I'd switch to Idris/Agda) - concurrency (don't ask)
Jacques _______________________________________________ Haskell-Cafe mailing list To (un)subscribe, modify options or view archives go to: http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe Only members subscribed via the mailman list are allowed to post.

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 *grad* 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 😉 . I don’t think we’ll get to that in the undergrad class. Maybe as bonus questions.
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!
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).
From: Tikhon Jelvis

Have you looked at Richard Bird's "Thinking Functionally"?
On Fri, 18 Dec 2020 at 11:53, Carette, Jacques
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 * *grad** 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 😉 . I don’t think we’ll get to that in the undergrad class. Maybe as bonus questions.
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!
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).
*From:* Tikhon Jelvis
*Sent:* December 16, 2020 10:42 PM *To:* Carette, Jacques *Cc:* haskell-cafe *Subject:* Re: [Haskell-cafe] Intermediate Modern Haskell 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?
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.
On Wed, Dec 16, 2020, 19:22 Jacques Carette
wrote: I will be teaching a second Haskell course next semester. Let's assume that
Introducing functional programming
Getting started with Haskell and GHCi
Basic types and definitions
Designing and writing programs
Data types, tuples and lists
Programming with lists
Defining functions over lists
Playing the game: I/O in Haskell
Reasoning about programs
Generalization: patterns of computation
Higher-order functions
Developing higher-order programs
Overloading, type classes and type checking
Algebraic types
(i.e. the first chapters of Thompson's Haskell: the Craft of Functional Programming book is "beginner, classic Haskell". The next few chapters, namely
Abstract data types
Lazy programming
Programming with monads
Domain-Specific Languages
Time and space behaviour
would be (re)done at the start of such a second course. The question for cafe is: what else? I will likely cover: - Typeclassopedia - finally tagless - Template Haskell - Optics - GADTs - recursion schemes
I should probably cover parser combinators, pretty-printing, cabal&stack. I know that http://dev.stephendiehl.com/hask/ gives me one heck of a smorgasbord of options, which is kind of a problem.
Things I know I will not cover: - dependent types (if I was going to do that, I'd switch to Idris/Agda) - concurrency (don't ask)
Jacques
_______________________________________________ Haskell-Cafe mailing list To (un)subscribe, modify options or view archives go to: http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe Only members subscribed via the mailman list are allowed to post.
_______________________________________________ Haskell-Cafe mailing list To (un)subscribe, modify options or view archives go to: http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe Only members subscribed via the mailman list are allowed to post.

Okasaki's debit analysis!
On Wed, Dec 16, 2020, 10:20 PM Jacques Carette
I will be teaching a second Haskell course next semester. Let's assume that
Introducing functional programming
Getting started with Haskell and GHCi
Basic types and definitions
Designing and writing programs
Data types, tuples and lists
Programming with lists
Defining functions over lists
Playing the game: I/O in Haskell
Reasoning about programs
Generalization: patterns of computation
Higher-order functions
Developing higher-order programs
Overloading, type classes and type checking
Algebraic types
(i.e. the first chapters of Thompson's Haskell: the Craft of Functional Programming book is "beginner, classic Haskell". The next few chapters, namely
Abstract data types
Lazy programming
Programming with monads
Domain-Specific Languages
Time and space behaviour
would be (re)done at the start of such a second course. The question for cafe is: what else? I will likely cover: - Typeclassopedia - finally tagless - Template Haskell - Optics - GADTs - recursion schemes
I should probably cover parser combinators, pretty-printing, cabal&stack. I know that http://dev.stephendiehl.com/hask/ gives me one heck of a smorgasbord of options, which is kind of a problem.
Things I know I will not cover: - dependent types (if I was going to do that, I'd switch to Idris/Agda) - concurrency (don't ask)
Jacques _______________________________________________ Haskell-Cafe mailing list To (un)subscribe, modify options or view archives go to: http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe Only members subscribed via the mailman list are allowed to post.

Which also reminds me of the Hinze-Paterson paper on Finger Trees. Excellent.
From: David Feuer

Speaking of finger trees, this video does an excellent job of explaining them, if you're looking for another angle on the idea (either use the accompanying paper, or mine the video for lecture ideas):
https://www.youtube.com/watch?v=ip92VMpf_-A
HTH,
-- Jack
December 18, 2020 8:51 AM, "Carette, Jacques"
Which also reminds me of the Hinze-Paterson paper on Finger Trees. Excellent.
On Wed, Dec 16, 2020, 10:20 PM Jacques Carette
wrote: I will be teaching a second Haskell course next semester.

Dear Jacques,
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
https://www.manning.com/books/haskell-in-depth
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.
--
Kind regards,
Artem
On Wed, Dec 16, 2020, 10:22 PM Jacques Carette
I will be teaching a second Haskell course next semester. Let's assume that
Introducing functional programming
Getting started with Haskell and GHCi
Basic types and definitions
Designing and writing programs
Data types, tuples and lists
Programming with lists
Defining functions over lists
Playing the game: I/O in Haskell
Reasoning about programs
Generalization: patterns of computation
Higher-order functions
Developing higher-order programs
Overloading, type classes and type checking
Algebraic types
(i.e. the first chapters of Thompson's Haskell: the Craft of Functional Programming book is "beginner, classic Haskell". The next few chapters, namely
Abstract data types
Lazy programming
Programming with monads
Domain-Specific Languages
Time and space behaviour
would be (re)done at the start of such a second course. The question for cafe is: what else? I will likely cover: - Typeclassopedia - finally tagless - Template Haskell - Optics - GADTs - recursion schemes
I should probably cover parser combinators, pretty-printing, cabal&stack. I know that http://dev.stephendiehl.com/hask/ gives me one heck of a smorgasbord of options, which is kind of a problem.
Things I know I will not cover: - dependent types (if I was going to do that, I'd switch to Idris/Agda) - concurrency (don't ask)
Jacques _______________________________________________ Haskell-Cafe mailing list To (un)subscribe, modify options or view archives go to: http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe Only members subscribed via the mailman list are allowed to post.
participants (7)
-
Artem Pelenitsyn
-
Carette, Jacques
-
David Feuer
-
jack@jackkelly.name
-
Jacques Carette
-
Richard O'Keefe
-
Tikhon Jelvis