Suggestions for "Advanced" Topics for Haskell-based Class

I am teaching a class in Haskell-based functional programming for advanced undergraduates and beginning graduate students at my institution. None of the students have previously used Haskell and for most of my students functional programming is new. Because I am teaching this in a "multiparadigm programming" course, I want to expand beyond what I have usually covered in the Haskell-based "functional programming" course and cover a few topics in areas such as parallel, concurrent, distributed, reactive, or metaprogramming (domain-specific languages, Template Haskell, etc.). Assuming my course has more or less covered the topics in *Learn You a Haskell for Great Good *(with likely shallow coverage of monads) at that point, what would be good additional topics to cover, libraries to use, and tutorial or teaching resources to use? Although I have taught fundamental Haskell FP topics for many years, I have not delved into any of these "advanced" topics. Thanks, Conrad -- H. Conrad Cunningham, Professor Computer and Information Science University of Mississippi (USA)

I am teaching a class in Haskell-based functional programming for advanced undergraduates and beginning graduate students at my institution. None of the students have previously used Haskell and for most of my students functional
I _personally_ don't like LYAH, but I highly recommend Parallel and Concurrent
Programming in Haskell[1] especially the second half. It's *required* reading
for real world Haskelling.
[1] http://chimera.labs.oreilly.com/books/1230000000929
On Jan 24 2017, at 12:55 pm, Conrad Cunningham
Because I am teaching this in a "multiparadigm programming" course, I want to expand beyond what I have usually covered in the Haskell-based "functional
programming" course and cover a few topics in areas such as parallel, concurrent, distributed, reactive, or metaprogramming (domain-specific languages, Template Haskell, etc.).
Assuming my course has more or less covered the topics in _Learn You a Haskell for Great Good _(with likely shallow coverage of monads) at that
point, what would be good additional topics to cover, libraries to use, and tutorial or teaching resources to use? Although I have taught fundamental Haskell FP topics for many years, I have not delved into any of these "advanced" topics.
Thanks,
Conrad
\--
H. Conrad Cunningham, Professor
Computer and Information Science
University of Mississippi
(USA)

Am 24.01.2017 um 22:15 schrieb Joe Hillenbrand:
I _personally_ don't like LYAH, but I highly recommend Parallel and Concurrent Programming in Haskell[1] especially the second half. It's *required* reading for real world Haskelling.
Can you expand on that? Both book title and synopsis seem to indicate that it is focused on parallel programming, which is important but certainly not the only thing you'd want to do in the real world. Also, not all real-world tasks involve parallelism, so the claim that parallelism is required reading requires substantiation.

I think the concurrency half is most important. Any non trivial Haskell
program should leverage concurrency, and Haskell's concurrency is amazing.
Correct, it's not the only thing a person should know to write Haskell, but it
is a required part of the curriculum. It also covers a lot of ground in
demonstrating why Haskell is great.
On Jan 24 2017, at 8:59 pm, Joachim Durchholz
Am 24.01.2017 um 22:15 schrieb Joe Hillenbrand: I _personally_ don't like LYAH, but I highly recommend Parallel and Concurrent Programming in Haskell[1] especially the second half. It's *required* reading for real world Haskelling.
Can you expand on that? Both book title and synopsis seem to indicate that it is focused on
parallel programming, which is important but certainly not the only thing you'd want to do in the real world. Also, not all real-world tasks involve parallelism, so the claim that parallelism is required reading requires substantiation. _______________________________________________ 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.

Am 25.01.2017 um 06:24 schrieb Joe Hillenbrand:
Correct, it's not the only thing a person should know to write Haskell, but it is a required part of the curriculum.
Ah, so I understood "real world Haskelling" as "doing a specific real-world Haskell project" (which may or may not require parallelism) while you meant "having the competence to work in *any* real-world Haskell project" (some of which will certainly require parallelism).

Dear Conrad, There have been several classes taught at Stanford along the lines you ask about: CS240h (2011) http://www.scs.stanford.edu/11au-cs240h/ CS240h (2014) http://www.scs.stanford.edu/14sp-cs240h/ under the title “Functional Systems in Haskell.” Jakub Tucholski and I taught a course inspired by these classes at Chicago in 2015 with the same title: CMSC 22311 (2015) http://cmsc-22311.cs.uchicago.edu/2015/ The material (in my class, at least) is a bit dated — Haskell evolves quickly, so the lectures suffer from inevitable entropy, but there’s a de facto syllabus there, and considerable supporting lecture material (this is true also of the original Stanford sites). Anyway, here’s what we did: • Introduction (a quick review of Haskell) • Typeclassopedia • Arrays and Mutability • QuickCheck • Seq and All That • IO • Pattern Guards • Template Haskell • Lenses • Zippers • Testing • GADTs • Parallel Haskell • Concurrency, Exceptions, and STM • Networking • Yesod Were I to do this again, I’d probably opt for Happstack over Yesod (if only because I can get Happstack to install on a Raspberry Pi, and so it’s what I’m playing with now). For a bit of variety, if you have time, you might want to throw in a bit of Elm (http://elm-lang.org), an eager language that is similar in syntax to Haskell, which compiles to JavaScript. It’s fun, and high leverage for people who already know Haskell. We’d hoped to do pipes, but ran out of time (quarters are short). Peace, Stu --------------- Stuart A. Kurtz Professor, Department of Computer Science and the College Director of Undergraduate Studies for Computer Science The University of Chicago

Hello Conrad, Thus quoth Conrad Cunningham at 20:53 on Tue, Jan 24 2017:
Because I am teaching this in a "multiparadigm programming" course, I want to expand beyond what I have usually covered in the Haskell-based "functional programming" course and cover a few topics in areas such as parallel, concurrent, distributed, reactive, or metaprogramming (domain-specific languages, Template Haskell, etc.).
Assuming my course has more or less covered the topics in *Learn You a Haskell for Great Good *(with likely shallow coverage of monads) at that point, what would be good additional topics to cover, libraries to use, and tutorial or teaching resources to use?
I've been teaching Haskell for beginners for some (relatively short) time, and it seems to me that parallel and concurrent programming may be one very good additional topic. I particularly like Simon Marlow's tutorial "Parallel and Concurrent Programming in Haskell" [0]: it's very well written and gives some clear practical examples. -- Sergiu [0] http://community.haskell.org/~simonmar/par-tutorial.pdf

I would suggest looking into more advanced monadic concepts (including
monad transformers, free monads, continuation monads, etc.), and perhaps
Lenses.
Will
On Tue, Jan 24, 2017 at 2:53 PM, Conrad Cunningham
what would be good additional topics to cover ...?

I would encourage GUI development using GHCJS or FRP or ... :)
On Tue, Jan 24, 2017 at 12:53 PM, Conrad Cunningham
I am teaching a class in Haskell-based functional programming for advanced undergraduates and beginning graduate students at my institution. None of the students have previously used Haskell and for most of my students functional programming is new.
Because I am teaching this in a "multiparadigm programming" course, I want to expand beyond what I have usually covered in the Haskell-based "functional programming" course and cover a few topics in areas such as parallel, concurrent, distributed, reactive, or metaprogramming (domain-specific languages, Template Haskell, etc.).
Assuming my course has more or less covered the topics in *Learn You a Haskell for Great Good *(with likely shallow coverage of monads) at that point, what would be good additional topics to cover, libraries to use, and tutorial or teaching resources to use? Although I have taught fundamental Haskell FP topics for many years, I have not delved into any of these "advanced" topics.
Thanks, Conrad
-- H. Conrad Cunningham, Professor Computer and Information Science University of Mississippi (USA)
_______________________________________________ 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.
-- -- Sent from an expensive device which will be obsolete in a few months! :D Casey

I think something useful could be memory concerns: analysing space leaks,
strictness, fusion, and related areas.
--
Noon
On Wed, Jan 25, 2017 at 9:14 AM, KC
I would encourage GUI development using GHCJS or FRP or ... :)
On Tue, Jan 24, 2017 at 12:53 PM, Conrad Cunningham
wrote:
I am teaching a class in Haskell-based functional programming for advanced undergraduates and beginning graduate students at my institution. None of the students have previously used Haskell and for most of my students functional programming is new.
Because I am teaching this in a "multiparadigm programming" course, I want to expand beyond what I have usually covered in the Haskell-based "functional programming" course and cover a few topics in areas such as parallel, concurrent, distributed, reactive, or metaprogramming (domain-specific languages, Template Haskell, etc.).
Assuming my course has more or less covered the topics in *Learn You a Haskell for Great Good *(with likely shallow coverage of monads) at that point, what would be good additional topics to cover, libraries to use, and tutorial or teaching resources to use? Although I have taught fundamental Haskell FP topics for many years, I have not delved into any of these "advanced" topics.
Thanks, Conrad
-- H. Conrad Cunningham, Professor Computer and Information Science University of Mississippi (USA)
_______________________________________________ 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.
--
--
Sent from an expensive device which will be obsolete in a few months! :D Casey
_______________________________________________ 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.
-- Noon Silk, ن https://silky.github.io/ "Every morning when I wake up, I experience an exquisite joy — the joy of being this signature."

On 1/24/2017 5:58 PM, Noon van der Silk wrote:
I think something useful could be memory concerns: analysing space leaks, strictness, fusion, and related areas.
-- Noon
On Wed, Jan 25, 2017 at 9:14 AM, KC
mailto:kc1956@gmail.com> wrote: I would encourage GUI development using GHCJS or FRP or ... :)
On Tue, Jan 24, 2017 at 12:53 PM, Conrad Cunningham
mailto:hcc.olemiss@gmail.com> wrote: I am teaching a class in Haskell-based functional programming for advanced undergraduates and beginning graduate students at my institution. None of the students have previously used Haskell and for most of my students functional programming is new.
Because I am teaching this in a "multiparadigm programming" course, I want to expand beyond what I have usually covered in the Haskell-based "functional programming" course and cover a few topics in areas such as parallel, concurrent, distributed, reactive, or metaprogramming (domain-specific languages, Template Haskell, etc.).
Assuming my course has more or less covered the topics in /Learn You a Haskell for Great Good /(with likely shallow coverage of monads) at that point, what would be good additional topics to cover, libraries to use, and tutorial or teaching resources to use? Although I have taught fundamental Haskell FP topics for many years, I have not delved into any of these "advanced" topics.
Thanks, Conrad
--
If you want to focus on math a bit, start with purity/parametricity/type safety, and then work up from there. You can lead into the Curry-Howard isomorphism and theorem proving languages like agda, or look in the direction of -XSafe, or the algebra of ADTs / free theorems / djinn. Both of these trains of thought eventually merge at the idea of automation acquiring knowledge from code and using it to write more code for you.
participants (9)
-
Conrad Cunningham
-
Joachim Durchholz
-
Joe Hillenbrand
-
Joe Quinn
-
KC
-
Noon van der Silk
-
Sergiu Ivanov
-
Stuart A. Kurtz
-
William Yager