https://wiki.haskell.org/api.php?action=feedcontributions&user=Aivan&feedformat=atomHaskellWiki - User contributions [en]2019-10-14T04:45:27ZUser contributionsMediaWiki 1.27.4https://wiki.haskell.org/index.php?title=Haskell_in_education&diff=55924Haskell in education2013-05-13T15:34:05Z<p>Aivan: /* Haskell as a second language */</p>
<hr />
<div>[[Category:Education]]<br />
This is a collection of material of interest to those teaching or<br />
taking courses that use Haskell. There is also a more general site,<br />
http://www.cs.kun.nl/fple/, devoted to all functional languages. The proceedings of the latest<br />
[http://www.informatik.uni-kiel.de/~mh/publications/reports/fdpe02/ International Workshop on Functional and Declarative Programming in Education (FDPE)] are now available.<br />
Some of the lecture notes and<br />
other course material found in these web pages are excellent<br />
supplements to the available text books.<br />
If you would like to use lecture<br />
notes, assignments, or other material found in these course web pages<br />
please contact the author for permission.<br />
<br />
Most of the entries are years old. When you add your own new<br />
material to this page, please also say when the course was run for the last time.<br />
<br />
The results of a survey of university courses using Haskell in the academic year 2005-2006 can be found [http://www.cs.chalmers.se/~rjmh/Wash/Survey/teaching.htm here]. Also, some news were added during the 2006-2007 academic year.<br />
<br />
== Suitable Course Textbooks ==<br />
<br />
See [[Books#Textbooks]].<br />
<br />
== Haskell as a first language ==<br />
<br />
These courses teach Haskell to students with no background in programming.<br />
<br />
<b>Instructor:</b> [http://homepages.inf.ed.ac.uk/wadler/ Philip Wadler] University of Edinburgh<br><br />
<b>Course:</b> [[Informatics 1 - Functional Programming]]<br><br />
<b>Materials:</b> GHCi, Emacs, Thompson: Haskell, the Craft of Functional Programming<br><br />
<b>Web page:</b> http://www.inf.ed.ac.uk/teaching/courses/inf1/fp/ <br><br />
<br />
<br />
<b>Instructor:</b> [mailto:page@ou.edu Rex Page] <br />
University of<br />
Oklahoma<br><br />
<b>Course:</b> Introduction to Computer Programming<br><br />
<b>Student background:</b> High-school mathematics<br><br />
<b>Materials:</b> Projects, Exams, Downloadable textbook: Rex Page, <br />
&quot;Two<br />
Dozen Short Lessons in Haskell&quot;<br><br />
<b>Web page:</b> http://www.cs.ou.edu/~rlpage/fpclassSpring97/<br />
<br />
<b>Comments:</b><br />
<blockquote><br />
These materials arose from a course offered for three consecutive<br />
semesters as<br />
an alternative to our usual first course in programming. Most of the<br />
students<br />
who took the course graduated in the past two years, and many of them<br />
cited it<br />
in the exit interview with the department chair as the most influential<br />
course<br />
in the entire academic career.<br />
<p>All materials for two offerings of the course are available through<br />
the web<br />
page. This includes individual projects, team projects, project<br />
solutions,<br />
exams, supplied software (connected with certain projects), tips for<br />
students<br />
taking the course, FAQs addressing questions that students asked during<br />
the<br />
semester, and a short textbook which served as the primary text in the<br />
course.</p><br />
<p>The first 10 to 11 weeks of the course use Haskell. Students are<br />
required to<br />
write nine programs in Haskell, three of which are team projects that<br />
combine<br />
software developed in individual projects. Different members of a team<br />
are<br />
assigned different individual projects, and the team efforts combine<br />
their<br />
solutions into a working piece of software.</p><br />
<p>In the early part of the course, students use operators like map,<br />
foldr, zip,<br />
and iterate to express computations. Explicit recursion is introduced<br />
after some<br />
experience with these common patterns of computation. Examples and<br />
problems<br />
address non-numeric applications, for the most part. Both interactive<br />
and file<br />
I/O are covered, but general purpose monads are not.</p><br />
<p>The last 5 to 6 weeks of the course use C, and most of the projects<br />
in that<br />
part of the course duplicate the function of earlier pieces of software<br />
that the<br />
students have written in Haskell.</p><br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:Jonathan.Hill@comlab.ox.ac.uk Jonathan Hill]<br />
Oxford University Computing Laboratory<br><br />
<b>Course:</b> Functional Programming for the Integrated Graduate Development Programme in Software Engineering at Oxford University.<br><br />
<b>Student background:</b> Discrete mathematics (the course is a part time MSc for people from industry; most are from IBM or Nortel).<br><br />
<b>Materials:</b> Gofer (an old version, with a stripped down prelude---no parameter classes!); Own course material<br><br />
<b>Web page:</b> http://www.comlab.ox.ac.uk/igdp/text/course06.html<br />
Note: Web pages not accessible. May be ... moved ? <br />
<br />
<br />
<b>Instructor:</b> [mailto:nxg@cs.nott.ac.uk Neil Ghani]<br />
School of Computer Science, University of Nottingham<br><br />
<b>Course:</b> Functional Programming<br><br />
<b>Student background:</b> None<br><br />
<b>Materials:</b> Hugs; Graham Hutton, Programming in Haskell; own lecture slides<br><br />
<b>Web page:</b> http://www.cs.nott.ac.uk/~nxg/G51FUN06/fun.html<br />
<br />
<b>Instructor:</b> [mailto:prins@cs.unc.edu" Jan Prins]<br />
UNC Chapel Hill<br><br />
<b>Course:</b> Introduction to Functional Programming<br><br />
<b>Student background:</b> solid background in high-school science and mathematics<br><br />
<b>Materials:</b> Hugs 1.4 incl. Active Haskell, FRAN and [[Haskore]]; Simon Thompson, "Haskell: The Art of Functional Programming"<br><br />
<b>Web page:</b> http://www.cs.unc.edu/~prins/Classes/15/<br><br />
<b>Comments:</b><br />
<blockquote><br />
(Introductory programming course for CS and math/science majors, typically Freshman and Sophomores. Class size ~60)<br />
<br />
Our undergraduate computing environment is now largely<br />
PCs running Windows NT. We use NTEmacs as the programming<br />
environment with a slightly modified version of Emacs hugs<br />
mode with hugs running as a subprocess. The combined<br />
hugs/NTEmacs/Active Haskell distribution (available through<br />
course home page) is installed on 400+ public Win NT machines<br />
on campus and some unknown number of student-owned Win 95/98<br />
machines.<br />
<br />
This arrangement is new this semester, but so far has been<br />
working well. Keystroke-oriented interactive applications<br />
may be problematic with hugs running in NTEmacs shell mode.<br />
<br />
I'm planning assignments using Fran and Active Haskell and<br />
will try teaching the "brief introduction to imperative<br />
programming" at the end of the class using monads. I would<br />
be interested in talking with anyone who has experience or<br />
suggestions along these lines.<br />
<br />
I took a cue from Paul Hudak and others and have occasional<br />
appearances of MS Agents during lectures to wake students up!<br />
<br />
This is my first time teaching this course, and I would<br />
enjoy talking to others teaching at a similar level. A<br />
cursory search on the web didn't reveal many courses<br />
in this category.<br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:dave@cs.chalmers.se David Sands]<br />
University of Gothenburg & Chalmers University of Technology<br><br />
<b>Course:</b> Programmering för Naturvetare<br><br />
<b>Student background:</b> New students<br><br />
<b>Materials:</b> hugs 1.4; Simon Thompson<br><br />
<b>Web page:</b> http://www.md.chalmers.se/Cs/Grundutb/Kurser/nptah/<br><br />
<b>Comments:</b><br />
<blockquote><br />
This is the first part of a first course in programming. About 16<br />
lectures, each 2x45 mins plus weekly exercise classes and three<br />
assessed programming exercises. Most of my materials are in English.<br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:M.A.Rodrigues@dcs.hull.ac.uk Marcos A Rodrigues]<br />
The University of Hull, Hull, UK<br><br />
<b>Course:</b> Functional and Logic Programming<br><br />
<b>Student background:</b> none<br><br />
<b>Materials:</b> hugs 1.4; Haskell: the Craft of Functional Programming. Thompson S., Addison Wesley, 1996.<br><br />
<br />
<b>Instructor:</b> [mailto:Torsten.Grust@uni-konstanz.de Torsten Grust]<br />
University of Konstanz (Germany)<br> <br />
<b>Course:</b> Deklarative Programmierung (Declarative Programming, in german)<br><br />
<b>Student background:</b> basic math, no programming background required<br><br />
<b>Materials:</b> Hugs 1.4; (~300) slides available from the course web page;<br />
Jeroen Fokker's classroom text: Functional Programming<br />
http://www.cs.uu.nl/~jeroen/courses/fp-eng.ps.gz</a>;<br />
Richard Bird, Phil Wadler: Introduction to Functional Programming; Simon Peyton-Jones: Implementation of Functional Programming Languages<br><br />
<b>Web page:</b> http://www.fmi.uni-konstanz.de/dbis/Courses-old/Courses-ss98/decl-ss98.html<br><br />
<b>Comments:</b><br />
<blockquote><br />
The course is in German only (sorry about that). It additionally<br />
features an introduction to logical programming and Prolog.<br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:richardb@cse.unsw.edu.au Richard Buckland]<br />
University of New South Wales<br><br />
<b>Course:</b> Computing 1A<br><br />
<b>Student background:</b> Mixed, some have no computing<br />
background. This is our cs1 subject.<br><br />
<b>Materials:</b> Hugs 1.4; Simon Thompson<br><br />
<b>Web page:</b> http://www.cse.unsw.edu.au/~cs1011<br><br />
<br />
<br />
<b>Instructor:</b> [mailto:robert@techfak.uni-bielefeld Robert Giegerich], Stefan Posch, University Bielefeld, Germany<br><br />
<b>Course:</b> Introduction to Computer Science<br><br />
<b>Student background:</b> Completed High School (Abitur)<br><br />
<b>Materials:</b> Hugs; Class Notes by Robert Giegerich and Ralf Hinze<br><br />
<b>Comments:</b><br />
<blockquote><br />
Our first semester course<br />
uses Haskell as a vehicle to fundamental aspects of computation:<br />
algorithmics, specification and verification, efficiency analysis,<br />
programming methods. This works wonderfully. We do not require previous<br />
or additional programming experience. Haskell is quickly learned, <br />
to the necessary degreee; we make no attempt to cover the full language.<br />
This is NOT a Haskell course! Haskell allows us to speak about concepts<br />
of computer science WITHOUT a lot of language learning. And Haskell<br />
even helps to keep out detrimental habits from previous programming<br />
experience, as well as motivational problems resulting from the widely<br />
differing previous experiences of our incoming students.<br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:hj@sm.luth.se Håkan Jonsson] Luleå University of Technology, Sweden<br><br />
<b>Course:</b> SMD001, functional programming<br><br />
<b>Student background:</b> <br />
None. This is the very first programming course <br />
our students take.<br><br />
<b>Materials:</b> <br />
Materials: Simon Thompson's Haskell book + 7 laboratory/programming <br />
assignments using Hugs.<br />
<br><br />
<b>Web page:</b>http://www.sm.luth.se/csee/courses/smd/001/ (mostly Swedish)<br> <br />
<br />
<br />
<b>Instructor:</b> [mailto:Clem.Baker-Finch@cs.anu.edu.au Clem Baker-Finch, Australian National University<br><br />
<b>Course:</b>Introduction to Programming and Algorithms<br><br />
<b>Student background:</b> No programming background was<br />
assumed.<br />
<br><br />
<b>Materials:</b> GHC, GHCi, Simon Thompson 1st ed., my own materials. <br />
<br><br />
<b>Web page:</b> http://cs.anu.edu.au/Student/comp1100/<br> <br />
<b>Comments:</b><br />
<blockquote><br />
The first 75% of the course is basic programming concepts using Haskell. The remainder covers the same concepts in Java. This is reinforced - hopefully - by the third assignment (in Java) being the same as the first assignment (in Haskell). The aim is to provide a managed transition to the course which follows in second semester. Another point of possible interest is the use of a simple graphics library, ANUPlot, built on top of the OpenGL binding. See http://code.google.com/p/anuplot/<br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:lyndon@cs.uwa.edu.au Lyndon While] The University of Western Australia<br><br />
<b>Course:</b> Foundations of Computer Science<br><br />
<b>Student background:</b> None<br><br />
<b>Materials:</b> hugs 98; Thompson.<br><br />
<b>Web page:</b> http://undergraduate.cs.uwa.edu.au/courses/230.123<br><br />
<br />
<br />
<b>Instructor:</b> [http://www.cs.us.es/~jalonso José A. Alonso Jiménez] Dept of Computer Science and A.I., University of Seville, Spain<br><br />
<b>Course:</b> Informatics (Inform&aacute;tica, in spanish)<br><br />
<b>Student background:</b> None. This is the very first programming course <br />
our students take.<br><br />
<b>Materials:</b> GHCi, Emacs, Graham Hutton: &quot;Programming in Haskell&quot;, Slides, Exercises, Exams <br><br />
<b>Web page:</b> http://www.cs.us.es/~jalonso/cursos/i1m (in spanish)<br><br />
<b>First run:</b> 2009–2010<br><br />
<b>Last run:</b> 2012–2013<br />
<br />
----<br />
<br />
== Haskell as a second language ==<br />
<br />
These courses teach Haskell to students that have already learned<br />
another language.<br />
<br />
<b>Instructor:</b> [mailto:page@ou.edu Rex Page]<br />
University of Oklahoma<br><br />
<b>Course:</b> Discrete Mathematics<br><br />
<b>Student background:</b> High-school mathematics, introductory programming<br />
course (any language)<br><br />
<b>Materials:</b> Lecture notes, Projects, Exams, Solutions, Proof checking<br />
tools, etc.; text: Hall and O'Donnell, &quot;Discrete Mathematics with a<br />
Computer&quot;<br><br />
<br />
<b>Web page:</b> http://www.cs.ou.edu/~beseme/<br><br />
<b>Comments:</b><br />
<blockquote><br />
Lecture notes comprise over 350 animated slides (all both PowerPoint and<br />
PDF<br />
formats). About two-thirds of the material centers around mathematical logic.<br />
After the introduction of predicates, all of the examples in the logic<br />
portion<br />
of the course involve reasoning about properties of software, most of which is<br />
expressed in Haskell (a few are conventional looping functions).<br />
<p>Software examples include sum, sequence concatenation, logical operations on<br />
sequences, the Russian peasant algorithm, insertion and lookup in AVL <br />
trees, and<br />
other computations. Most of the properties verified relate to aspects of <br />
program<br />
correctness, but resource utilization properties are also verified in <br />
some<br />
cases. Several semesters worth of exams (finals and exams given during <br />
the term)<br />
are provided. The slides have matured through several offerings of the course.</p><br />
<p>The remaining third of the course discusses other standard topics<br />
in discrete<br />
mathematics, such as sets, functions, relations, trees, and counting.<br />
The web<br />
page provides access to a preview of the material. Exams and solutions are<br />
protected by a login procedure (to increase the comfort level of<br />
instructors<br />
wishing to use them in courses). The web page provides a link through<br />
which<br />
instructors may gain access to the full website.</p><br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:labra@lsi.uniovi.es Jose Emilio Labra Gayo],<br />
Dept. of Computer Science (EUITIO) University of Oviedo<br><br />
<b>Course:</b> Logic and Functional Programming<br><br />
<b>Student background:</b> The course is oriented towards third year undergraduate students in computer science. Usually, the students have been<br />
introduced to imperative languages like Pascal and Object <br />
Oriented Languages like C++<br><br />
<b>Materials:</b> Hugs; R. Bird "Introd. to FP using Haskell" (2nd Ed), J. E. Labra Gayo. "Introduction to the Haskell Language" (in spanish).<br><br />
<b>Web page:</b> http://lsi.uniovi.es/~labra/plf.html (in spanish).<br />
My FP page: http://lsi.uniovi.es/~labra/FuncProg.html<br><br />
<br />
<br />
<b>Instructor:</b> [mailto:fruehr@willamette.edu Fritz Ruehr]<br />
Willamette University, Salem, Oregon, USA (a small Liberal Arts College, about 1 hour from Portland & OGI)<br><br />
<b>Course:</b> CS 451 Topics in Computer Science: Functional Programming<br><br />
<b>Student background:</b> Data structures (I may also have required discrete math)<br><br />
<b>Materials:</b> Hugs 1.4 beta (I also taught Scheme); Haskell: The Craft of Functional Programming by Simon Thompson (I also used my own on-line lecture notes and labs and Kent Dybvig's text on Scheme)<br><br />
<b>Web page:</b> http://www.willamette.edu/~fruehr/451/<br><br />
<b>Comments:</b><br />
<blockquote><br />
The notes and labs I have on-line are in pretty rough form: many slide <br />
points are just one-line topical stubs I used as reminders in lecture.<br />
Many of the on-line materials are not linked into the (out of date)<br />
home page.<br />
<br />
I hope to have the course approved for next Fall as a regular offering<br />
(i.e., not as a "special topic") and should have more extensive<br />
on-line materials up by then.<br />
<br />
Teaching "bi-lingually" in Haskell and Scheme seemed like a good idea<br />
at the time, but next time around I will use Haskell as the main vehicle,<br />
perhaps taking some time near the end of the course to highlight some<br />
other languages (Scheme, ML, Clean).<br />
<br />
Some of my students used Conal Elliot's Fran and Paul Hudak's Haskore<br />
and liked them a lot; I was nice to have some significantly-sized<br />
applications that seemed more practical and fun to show off at the end<br />
of the course (I should have demonstrated these things at the beginning<br />
of the course to help with motivation). Next time around I would like to<br />
have a "beginner's prelude" or similar available to avoid problems with<br />
classes in type inference, Int vs. Integer, etc. These problems were a<br />
constant annoyance during lectures.<br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:J.Hamer@cs.auckland.ac.nz John Hamer],<br />
University of Auckland<br><br />
<b>Course:</b> Logic and Functional Programming<br><br />
<b>Student background:</b> Year 2 programming + some discrete maths<br><br />
<b>Materials:</b> Hugs 98, Haskell School of Expression, Page "Two Dozen Short Lessons in Haskell",<br><br />
<b>Web page:</b> http://www.cs.auckland.ac.nz/compsci360fc<br><br />
<br />
<br />
<b>Instructor:</b> [mailto:lengauer@fmi.uni-passau.de Chris Lengauer]<br />
University of Passau<br><br />
<b>Course:</b> Functional Programming<br><br />
<b>Student background:</b> two years of CS study<br><br />
<b>Materials:</b> hugs; Richard Bird's new text (PHI)<br><br />
<b>Web page:</b> not reachable from outside Passau<br><br />
<br />
<br />
<b>Instructor:</b> [mailto:cunningham@cs.olemiss.edu Conrad Cunningham]<br />
University of Mississippi<br><br />
<b>Course:</b> Functional Programming<br><br />
<b>Student background:</b> official -- senior or graduate standing; actual -- introductory programming, data structures, and discrete math<br><br />
<b>Materials:</b> Hugs on Unix and MS Windows systems;<br />
Mostly use the instructor's own set of lecture notes. Also Simon Thompson's HASKELL: THE CRAFT OF FUNCTIONAL PROGRAMMING. Previously used the Bird and Wadler textbook<br><br />
<b>Web page:</b> http://www.cs.olemiss.edu/~hcc/csci555/<br><br />
<b>Comments:</b><br />
<blockquote><br />
Although I am not a researcher in FP, I enjoy teaching the FP course.<br />
Most of the students take to the course after a few weeks. Hugs works<br />
reasonably well, but, of course, more pedagogically oriented error messages<br />
and other support tools would be helpful.<br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:leavens@cs.iastate.edu Gary T. Leavens],<br />
Iowa State University<br><br />
<b>Course:</b> Programming Languages 1<br><br />
<b>Student background:</b> undergraduate course in compilers or programming languaages<br><br />
<b>Materials:</b> Hugs 1.4; Thompson's Haskell: The Craft of Programming<br><br />
<b>Web page:</b> http://www.cs.iastate.edu/~leavens/ComS541.html<br><br />
<b>Comments:</b><br />
<blockquote><br />
Be sure to tell your students how to debug programs.<br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:jtod@dcs.gla.ac.uk John O'Donnell]<br />
University of Glasgow<br><br />
<b>Course:</b> Functional Programming<br><br />
<b>Student background:</b> Programming (in Ada), Algorithmic Foundations<br><br />
<b>Materials:</b> Hugs; Simon Thompson's book on Haskell<br><br />
<b>Web page:</b> http://www.dcs.gla.ac.uk/courses/teaching/level2/modules/#FP2<br><br />
<br />
<b>Instructor:</b> [mailto:chitil@informatik.rwth-aachen.de Olaf Chitil],<br />
RWTH Aachen, Germany<br><br />
<b>Course:</b> Functional Programming in Haskell<br><br />
<b>Student background:</b> basic programming skills (not necessarily in a<br />
functional language)<br><br />
<b>Materials:</b> Hugs 1.4; Hugs user manual, slide copies;<br />
additionally the `Gentle Introduction to Haskell', probably Bird's `Introduction<br />
to Functional Programming using Haskell' in the future.<br><br />
<b>Web page:</b> http://www-i2.informatik.rwth-aachen.de/Praktikum/SWP/ (in German)<br><br />
<b>Comments:</b><br />
<blockquote><br />
The course starts with 4 full time days of learning Haskell. During the semester<br />
the students (in groups of 2 students) have to implement a compiler and an<br />
abstract machine for a simple imperative language. They are given parts of the<br />
system and a manual on how to do the remaining parts (they have no prior<br />
knowledge on compiler construction).<br />
The most difficult construct for students to understand is the monad. I<br />
introduce IO without mentioning monads. Later I explain how to build a simple<br />
exception handling system based on the type `Maybe a' / `Error a'. Only<br />
subsequently I give the general definition of monads and present the list monad<br />
and a simple state monad. However, I fear that just to understand the bind<br />
operator `>>=' requires people to be quite comfortable with higher-order<br />
functions.<br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [http://web.comlab.ox.ac.uk/oucl/people/richard.bird.html Richard Bird], Oxford Brookes University<br><br />
<b>Course:</b> Functional Programming<br><br />
<b>Student background:</b> Elementary structured programming<br><br />
<b>Web page:</b> http://web.comlab.ox.ac.uk/oucl/courses/topics00-01/fp/<br><br />
<br />
<br />
<b>Instructor:</b> [mailto:paul.hudak@yale.edu Paul Hudak],<br />
Yale University, Dept of Computer Science<br><br />
<b>Course:</b> Functional Programming<br><br />
<b>Student background:</b> at least one programming course<br><br />
<b>Materials:</b> Hugs; my own textbook, which is under preparation<br><br />
<b>Web page:</b> none<br><br />
<br />
<br />
<b>Instructor:</b> [mailto:abf@cs.ucc.ie Alex Ferguson]<br />
University College Cork<br><br />
<b>Course:</b> Functional and Logic Programming<br><br />
<b>Student background:</b> Final year undergraduate<br />
<br><br />
<b>Materials:</b> Final year undergraduate<br />
Materials: Hugs 98; ghc; Simon Thompson, "Haskell: The Craft of<br />
Functional Programming" (2nd ed.)<br />
<br><br />
<b>Web page:</b> http://yeats.ucc.ie/~abf/CS4001/<br> <br />
<b>Comments:</b><br />
<blockquote><br />
This is the declarative programming option for 4th year<br />
undergrads, who have Java as a first programming language, and some<br />
knowledge of C and C++. The current final year have had some exposure<br />
to Haskell in first year, though this is no longer the case for our<br />
current intake.<br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:lky@nada.kth.se Leif Kusoffsky],<br />
Royal Institute of Technology, Stockholm<br><br />
<b>Course:</b> Functional Programming 2D1370<br><br />
<b>Student background:</b> The course is oriented towards third year<br />
undergraduate students in computer science. The students<br />
have been introduced to imperative languages like<br />
C and Object Oriented Languages like Java<br />
<br><br />
<b>Materials:</b> Hugs; Hudak : The Haskell School of Expression<br />
<br><br />
<br />
<br />
<b>Instructor:</b> Jeremy Bobbio -- INSIA<br><br />
<b>Course:</b> Functional and Logic Programming<br><br />
<b>Student background:</b> One year CS<br />
<br><br />
<b>Materials:</b> <br />
Hugs, GHC, Paul Hudak's Haskell School of Education<br />
<br><br />
<b>Web page:</b> http://etudiants.insia.org/~jbobbio/pafp/ (french)<br> <br />
<br />
<br />
<b>Instructor:</b> [mailto:antkaij@mit.jyu.fi Antti-Juhani Kaijanaho]<br />
University of Jyväskylä<br><br />
<b>Course:</b> Functional Programming 1 & 2<br><br />
<b>Student background:</b> third-year undergraduate and up<br />
<br><br />
<b>Materials:</b><br />
GHC, Gtk2HS<br />
<br><br />
<b>Web page:</b> [http://www.mit.jyu.fi/antkaij/opetus/fo/2005-2006/index.en.html]<br />
<br><br />
<b>Last run:</b> 2005&ndash;2006<br />
<br><br />
<!--<b>Comments:</b><br />
<blockquote><br />
(I'll write this later)<br />
</blockquote>--><br />
<br />
<b>Instructor:</b> [mailto:djd@comp.leeds.ac.uk David Duke]<br />
University of Leeds, School of Computing<br><br />
<b>Course:</b> Functional Programming<br><br />
<b>Student background:</b> Second and third year undergraduate<br />
<br><br />
<b>Materials:</b> ghc; Graham Hutton "Programming in Haskell"<br />
<br><br />
<b>Web page:</b> www.comp.leeds.ac.uk/se23/<br> <br />
<b>Comments:</b><br />
<blockquote><br />
This is an optional course that students currently can take in <br />
second or third year (from 2008/9 it will be third-years only).<br />
Students will have previously used Python and Java.<br />
Although the emphasis is on learning to solve problems within<br />
the functional paradigm, and how to develop solutions within<br />
Haskell, I also like to show students what is "under the<br />
bonnet" and conclude the module with an introduction to<br />
implementation issues, using material derived from<br />
"Implementing Functional Languages" by Simon Peyton Jones and <br />
David Lester. <br />
</blockquote><br />
<br />
<b>Instructor:</b> [mailto:popavdan@yahoo.com Popa V. Dan]<br />
University of Bacau, Romania <br><br />
<b>Course:</b> "Limbaje formale si automate" (Formal languages and automata) <br><br />
<b>Student background:</b> second-year undergraduate <br />
<br><br />
<b>Materials:</b> Hugs 98 (2002 revised version) included in Mandriva (Formely Mandrake) 10.0 Linux Distribution<br />
<br><br />
<b>Web page:</b> Not yet. Try the page of the "ro" community on www.haskell.org<br />
<br> [http://www.haskell.org/haskellwiki/Ro/Haskell Ro/Haskell webpage is here] <br><br />
<b>First run:</b> 2006&ndash;2007<br />
<br><br />
<br />
Haskell is used as an implementation languages in student's laboratories.<br />
The ideea was to provide a language powerfull enough to be able to express <br />
how to build a parser starting from a grammmar. The students are able<br />
to build small (monadic) interpreters for "while-languages" using a <br />
recommanded monad and a recommanded back-end. The labs are focusing on the <br />
grammar of the languages, on the modular (monadic) parsing as a tool for <br />
verifying and processing inputs which are not validable by finite state <br />
automata but by context free grammmars. Adaptability of the language, <br />
especially obtained manipulating and improving syntax is also a target.<br />
<br />
Support (concerning Haskell): "O introducere in Haskell prin exemple" by<br />
Dan Popa, published in january 31,2007 by <br />
[http://www.edusoft.ro Edusoft](in romanian) Contact the author if needed .<br />
<br />
Other recommanded books: "Gentle Introd to Haskell 98" and YAHT <br />
Recomanded papers: All about monadic parsing. <br />
Special message for Graham Hutton, Erik Meijer and P. Wadler and all <br />
other authors with similar interests from the Haskell <br />
community:<br />
<br />
Thank you very much for your papers concerning Monadic parsing and <br />
interpreters ! <br><br />
<br />
<br />
'''List of Instructors:''' Involved people [http://www.pdep.com.ar/Home/quines-somos [1]] National and Technological University, Buenos Aires, Argentina (Universidad Tecnológica Nacional - Facultad Regional Buenos Aires)<br><br />
'''Course:''' Programming Paradigms <br><br />
'''Student background:''' This is a second-year undergraduate course. Students have already been introduced to basic structured programming concepts. <br><br />
'''Materials:''' Pharo Smalltalk; LOOP [http://www.esug.org/wiki/pier/Conferences/2011/InnovationTechnologyAwards [2]] , SWI-Prolog, Hugs, GHC, "Learn You a Haskell For a Great Good" (Spanish Version), Lecture Notes, Exams. <br><br />
'''Web page:''' You can find our homepage in [http://www.pdep.com.ar here] (Only Spanish Version).<br />
<br />
Students are being introduced to three main programming paradigms: <br><br />
<br />
• Object Oriented Programming <br><br />
• Logical Programming <br><br />
• Functional Programming <br><br />
<br />
----<br />
<br />
== Comparative programming languages ==<br />
<br />
These courses teach general programming language principles, with<br />
Haskell as an example of a functional language.<br />
<br />
<b>Instructor: </b> Ruediger Marcus Flaig, University of Heidelberg (Germany)<br />
<br><br />
<b>Course:</b> An introduction to programming in bioinformatics <br><br />
<b>Student background:</b> different, but generally low<br><br />
<b>Materials:</b> Hugs-98 and lots of other stuff<br />
<br><br />
<b>Web page:</b> http://www.sanctacaris.net/rc.html<br> <br />
<b>Comments:</b><br />
<blockquote><br />
This course is designed to introduce life science students,<br />
that is to say, going-to-be biologists, physicians, biotechnologists<br />
and maybe others, to solving real-life problems (such as DNA sequence<br />
handling and analysis). Emphasis will be on paradigms (imperative /<br />
OO, functional, declarative). Although -- in order not to frighten<br />
people -- the official announcement mentions only Python, Haskell will<br />
be presented as THE purely functional language, and all solutions may<br />
be presented in either Python, Haskell or Java. I am very curious<br />
about the feedback I'll get, and maybe next term we shall focus more<br />
on Haskell. What I'd really need, though, is some life science related<br />
package for Haskell, such as BIOPYTHON and BIORUBY. <br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:ham@cs.utexas.edu Hamilton Richards],<br />
University of Texas (Austin)<br><br />
<b>Course:</b> Programming Languages (taught in 2005)<br><br />
<b>Student background:</b> <br><br />
<b>Materials:</b> Hugs 1.4; Sethi, Davie.<br><br />
<b>Web page:</b> http://www.cs.utexas.edu/users/ham/UTCS/CS345/<br><br />
<b>Comments:</b><br />
<blockquote><br />
I'm using Haskell in a programming-languages course, but it's distributed<br />
somewhat piecemeal through the course. Probably adds up to something like<br />
3-4 weeks (out of 15).<br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [http://www.cs.waikato.ac.nz/~marku Mark Utting]<br />
University of Waikato (New Zealand)<br />
<b>Course:</b> Programming Languages<br><br />
<b>Student background:</b> Two years of C++ and 1 year of Haskell<br><br />
<b>Materials:</b> Textbook "Programming Languages", Louden.<br />
<b>Web page:</b> http://www.cs.waikato.ac.nz/~marku/313<br><br />
<b>Comments:</b><br />
<blockquote><br />
The course covers at least two languages in each of the<br />
main paradigms (object-oriented, functional and logic programming),<br />
plus history, semantics and implementation issues.<br />
The Haskell section is about 2 weeks long and usually focusses on <br />
programming with higher-order functions and how that enables the<br />
language to be extended in application-specific ways<br />
(parser combinators, html-generation combinators etc.)<br />
</blockquote><br />
<br />
<b>Instructor:</b> [mailto:zeeshan@apiit.edu.pk M Zeeshan Ali Ansari],<br />
Asia Pacific Institute of Information Technology (Pakistan)<br><br />
<b>Course:</b> Advanced Programming Language Concepts<br><br />
<b>Student background:</b> Students having studied and worked on Imperative Programming Languages <br><br />
<b>Materials:</b> The Craft of Haskell, A Gentle Introduction to Haskell, Yet Another Haskell Tutorial.<br><br />
<b>Web page:</b> http://www.apiit.edu.pk<br><br />
<b>Comments:</b><br />
<blockquote><br />
This course compares and contrasts various programming language paradigms including Functional Programming. Out of 13 week course 5 to 6 of them are dedicated towards Haskell. The material is basically written in a way that enables imperative language programmers to understand the concepts and power of functional programming <br />
<br />
http://www.haskell.org/sitewiki/images/3/3d/Functional_Programming_Tutorial_By_Zeeshan_Ali_Ansari.doc<br />
<br />
<br />
</blockquote><br />
<br />
<b>Instructor:</b> John C. Mitchell,<br />
Stanford University<br><br />
<b>Course:</b> Programming Languages<br><br />
<b>Student background:</b> Some experience with Lisp/C/object-oriented languages.<br><br />
<b>Materials:</b> Concepts in Programming Languages (new Haskell chapters written with Kathleen Fisher)<br><br />
<b>Web page:</b> http://cs242.stanford.edu<br><br />
<b>Comments:</b><br />
<blockquote><br />
Central concepts in modern programming languages, impact on software development, language design trade-offs, and implementation considerations. Functional, imperative, and object-oriented paradigms. Formal semantic methods and program analysis. Modern type systems, higher order functions and closures, exceptions and continuations. Modularity, object-oriented languages, and concurrency. Runtime support for language features, interoperability, and security issues. <br />
</blockquote><br />
<br />
----<br />
<br />
== Advanced functional programming using Haskell ==<br />
<br />
These courses deal with the advanced issues such as semantics, type<br />
systems, or compilers. Includes a other advanced courses taught using<br />
Haskell. <br />
<br />
<b>Instructor:</b> [mailto:gmh@cs.nott.ac.uk Graham Hutton]<br />
School of Computer Science, University of Nottingham<br><br />
<b>Course:</b> Advanced Functional Programming<br><br />
<b>Student background:</b> At least one year of CS, including a course in Haskell<br><br />
<b>Materials:</b> Hugs; GHC; Graham Hutton, Programming in Haskell; own course material<br><br />
<b>Web page:</b> http://www.cs.nott.ac.uk/~gmh/afp.html<br />
<br />
<b>Instructor:</b> [mailto:rjmh@cs.chalmers.se John Hughes]<br />
Chalmers University, Gothenburg<br><br />
<b>Course:</b> Advanced Functional Programming<br><br />
<b>Student background:</b> General CS maturity; from this year most students have already used Haskell in introductory courses.<br><br />
<b>Materials:</b> Mainly hbc.; Papers (see web page)<br><br />
<b>Web page:</b> http://www.cs.chalmers.se/~rjmh/AFP<br><br />
<b>Comments:</b><br />
<blockquote><br />
The goal is to teach students how to solve substantial problems in a<br />
functional language --- `functional programming in anger', one might say. The<br />
emphasis is on design and use of suitable combinator libraries to simplify<br />
applications. Material covered includes monad design, use of CPS style,<br />
libraries for parsing, pretty-printing, and GUIs (presently fudgets). <br />
<br />
The course is taught in a `problem based' manner: lectures are few, while<br />
students solve three substantial programming problems during the term, with<br />
plenty of backup via group meetings. I adopted this teaching form three years<br />
ago, and it has led students to develop far better practical skills than most<br />
obtained from my earlier `lectures and exercises' courses, and I believe to<br />
use Haskell much more after the course's end.<br />
<br />
This course is optional in the third or fourth year, and is taken by a<br />
small-to-medium sized group of students.<br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:Olof.Johanssson@cs.umu.se Olof Johansson], Umeå Univesity, Department of Computing Science<br><br />
<b>Course:</b> Programming language semantics<br><br />
<b>Student background:</b> two terms of computer science studies and specificaly a course Programming language concepts<br><br />
<b>Materials:</b> Hugs and some HBC and GHC; Watt, Programming language, Syntax and Semantics<br><br />
<b>Web page:</b> http://www.cs.umu.se/local/kurser/TDBC05 (Only in swedish)<br> <br />
<br />
<br />
<b>Instructor:</b> [mailto:lyndon@cs.uwa.edu.au Lyndon While]<br />
The University of Western Australia<br><br />
<b>Course:</b> Functional Programming<br><br />
<b>Student background:</b> OOP, plus most of them have used Haskell previously<br><br />
<b>Materials:</b> hugs 98; none of the recent books really fit<br><br />
<b>Web page:</b> http://undergraduate.cs.uwa.edu.au/courses/230.301<br><br />
<b>Instructor:</b> [mailto:F.A.Rabhi@dcs.hull.ac.uk Fethi Rabhi],<br />
University of Hull (UK)<br><br />
<b>Course:</b> AI Problem Solving Techniques (using Haskell and Prolog)<br><br />
<b>Student background:</b> Haskell and Prolog programming<br><br />
<b>Materials:</b> HUGS; Thompson'96, own notes (soon to be published as a book).<br><br />
<b>Web page:</b> none<br><br />
<b>Comments:</b><br />
<blockquote><br />
It is very hard to justify learning Haskell unless it can be<br />
demonstrated in very practical situations (hence the provision<br />
of the above course).<br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:karczma@info.unicaen.fr Jerzy Karczmarczuk]<br />
University of Caen, Caen (France)<br> No links in the fr-Haskell page. Why not ?<br />
<b>Course:</b> Compilation<br><br />
<b>Student background:</b> General CS knowledge; students (should...) know Scheme and imperative languages, also some theory of languages and automata.<br><br />
<b>Materials:</b> <br />
Hugs, GHC, now also GHCi, and their documentation. Handouts: (still a little incomplete)<br />
Impossible to find the foolowing matterials.Files can not be found. <br />
* http://users.info.unicaen.fr/~karczma/matrs/Maitcomp/compilation_a.pdf<br />
* http://users.info.unicaen.fr/~karczma/matrs/Maitcomp/compilation_b.pdf<br />
* http://users.info.unicaen.fr/~karczma/matrs/Maitcomp/compilation_c.pdf<br />
<b>Comments:</b><br />
<blockquote><br />
This is a compulsory semestrial course in fourth year. Weekly: 1.5h<br />
course, 2.5H practice.<br />
One, but comprehensive assignment, taking 2 months or more.<br />
askell is our main coding tool. A little time is devoted by necessity<br />
to the language<br />
itself, but also from the perspective: "how would you compile such a<br />
language".<br />
"Standard stuff", such as parsing combinators, etc.is covered, but we<br />
don't begin with that.<br />
We start with the construction of small interpreters: from recursive<br />
Lisp-style to postfix,<br />
(Forth/PostScript style) constructing this last by partial evaluation<br />
(intuitively).<br />
We introduce control structures as lazy functions, operation<br />
sequencing through continuations,<br />
monads not only for parsing, but also for exceptions and<br />
non-determinism.<br />
We discuss (simply) the type inference. The code generator assembles a<br />
linear code by lazy<br />
concatenation of chunks which makes it trivial to deal with loops and<br />
cross-referencing<br />
fragments. Algorithms of garbage collection are presented (not<br />
implemented, though...) in<br />
a purely functional style.<br />
<br />
Students' opinion: "Frightening at first. Learning curve steep, but<br />
much less time spent on debugging, coding proficiency comes fast. Good for<br />
understanding what the compilation is about, but difficult to make a<br />
complete running program with all the I/O, etc.<br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:jeffm@cse.uconn.edu Jeffrey A. Meunier], University of Connecticut<br><br />
<b>Course:</b> CSE240 Intermediate Computer Systems<br><br />
<b>Student background:</b> computer/microprocessor organization<br />
<br><br />
<b>Materials:</b> Hugs (Feb 2001); Bird ``Introduction to Functional<br />
Programming''; Furber ``ARM System-on-Chip Architecture''<br />
<br><br />
<b>Web page:</b> http://www.engr.uconn.edu/~jeffm/Classes/CSE240-Spring-2001/index.html<br> <br />
<b>Comments:</b><br />
<blockquote><br />
This is a course in the low level programming of microprocessor systems.<br />
The course will focus on the development of an emulator (virtual<br />
machine, or VM) for a small computer system based on a modern RISC<br />
microprocessor (the ARM CPU) using a high level programming language<br />
(Haskell), and assembly language programming of the VM. Development of<br />
the VM will occur in stages, starting with the simple direct-execution<br />
(stream-based) model, gradually moving to a more realistic memory-mapped<br />
model, including exception handlers, concurrent processes, and<br />
asynchronous external devices.<br />
</blockquote><br />
<br />
<b>Instructor:</b> Gabriele Keller<br />
The University of New South Wales<br><br />
<b>Course:</b> Concepts of Programming Languages<br><br />
<b>Student background:</b> Most of them have used Haskell in first year<br><br />
<b>Materials:</b> GHC, TaPL and `Programming Languages: Theory and Practice', papers<br><br />
<b>Web page:</b> http://www.cse.unsw.edu.au/~cs3161<br><br />
<b>Last run:</b> 2006<br><br />
<b>Comments:</b><br />
<blockquote><br />
Expose students to a theory of programming languages based on type<br />
theory and operational semantics as a mathematically sound framework<br />
which allows us to investigate the properties of a large number of<br />
programming language features, including:<br />
<br />
* on semantics of different programming languages and programming paradigms: imperative, object oriented, and declarative.<br />
* theoretical foundations of programming languages: syntax, operatational, axiomatic and denotational semantics.<br />
* implementation aspects of central language features, such as dynamic and strong typing, polymorphism, overloading and automatic memory management<br />
<br />
Assignments are in GHC/Haskell, and in the past have included implementing a<br />
mini-Haskell type checker, type inference and interpreter.<br />
</blockquote><br />
<br />
<b>Instructor:</b> Manuel Chakravarty<br />
The University of New South Wales<br><br />
<b>Course:</b> Advanced Functional Programming<br><br />
<b>Student background:</b> Most of them have used Haskell in first year<br><br />
<b>Materials:</b> GHC, papers (see the website)<br><br />
<b>Web page:</b> http://www.cse.unsw.edu.au/~cs4132<br><br />
<b>Last run:</b>2004<br><br />
<b>Comments:</b><br />
<blockquote><br />
To provide students with an understanding of the theory and practice of<br />
the design, use, and implementation of functional programming languages,<br />
such as Haskell<br />
<br />
This includes selected topics from the following areas:<br />
<br />
* Foundations: lambda calculus, semantics, and type systems.<br />
* Design: side-effects, exceptions, concurrency, and parallelism.<br />
* Implementation: abstract machines, program transformation, and memory management. <br />
* Programming techniques: combinator libraries, monads, generic programming, and meta programming.<br />
* Applications: domain specific languages, graphics, web programming, reactive systems, and scientific programming.<br />
</blockquote><br />
<br />
[[Category:Community]]</div>Aivanhttps://wiki.haskell.org/index.php?title=Haskell_in_education&diff=55923Haskell in education2013-05-13T15:30:38Z<p>Aivan: /* Haskell as a second language */</p>
<hr />
<div>[[Category:Education]]<br />
This is a collection of material of interest to those teaching or<br />
taking courses that use Haskell. There is also a more general site,<br />
http://www.cs.kun.nl/fple/, devoted to all functional languages. The proceedings of the latest<br />
[http://www.informatik.uni-kiel.de/~mh/publications/reports/fdpe02/ International Workshop on Functional and Declarative Programming in Education (FDPE)] are now available.<br />
Some of the lecture notes and<br />
other course material found in these web pages are excellent<br />
supplements to the available text books.<br />
If you would like to use lecture<br />
notes, assignments, or other material found in these course web pages<br />
please contact the author for permission.<br />
<br />
Most of the entries are years old. When you add your own new<br />
material to this page, please also say when the course was run for the last time.<br />
<br />
The results of a survey of university courses using Haskell in the academic year 2005-2006 can be found [http://www.cs.chalmers.se/~rjmh/Wash/Survey/teaching.htm here]. Also, some news were added during the 2006-2007 academic year.<br />
<br />
== Suitable Course Textbooks ==<br />
<br />
See [[Books#Textbooks]].<br />
<br />
== Haskell as a first language ==<br />
<br />
These courses teach Haskell to students with no background in programming.<br />
<br />
<b>Instructor:</b> [http://homepages.inf.ed.ac.uk/wadler/ Philip Wadler] University of Edinburgh<br><br />
<b>Course:</b> [[Informatics 1 - Functional Programming]]<br><br />
<b>Materials:</b> GHCi, Emacs, Thompson: Haskell, the Craft of Functional Programming<br><br />
<b>Web page:</b> http://www.inf.ed.ac.uk/teaching/courses/inf1/fp/ <br><br />
<br />
<br />
<b>Instructor:</b> [mailto:page@ou.edu Rex Page] <br />
University of<br />
Oklahoma<br><br />
<b>Course:</b> Introduction to Computer Programming<br><br />
<b>Student background:</b> High-school mathematics<br><br />
<b>Materials:</b> Projects, Exams, Downloadable textbook: Rex Page, <br />
&quot;Two<br />
Dozen Short Lessons in Haskell&quot;<br><br />
<b>Web page:</b> http://www.cs.ou.edu/~rlpage/fpclassSpring97/<br />
<br />
<b>Comments:</b><br />
<blockquote><br />
These materials arose from a course offered for three consecutive<br />
semesters as<br />
an alternative to our usual first course in programming. Most of the<br />
students<br />
who took the course graduated in the past two years, and many of them<br />
cited it<br />
in the exit interview with the department chair as the most influential<br />
course<br />
in the entire academic career.<br />
<p>All materials for two offerings of the course are available through<br />
the web<br />
page. This includes individual projects, team projects, project<br />
solutions,<br />
exams, supplied software (connected with certain projects), tips for<br />
students<br />
taking the course, FAQs addressing questions that students asked during<br />
the<br />
semester, and a short textbook which served as the primary text in the<br />
course.</p><br />
<p>The first 10 to 11 weeks of the course use Haskell. Students are<br />
required to<br />
write nine programs in Haskell, three of which are team projects that<br />
combine<br />
software developed in individual projects. Different members of a team<br />
are<br />
assigned different individual projects, and the team efforts combine<br />
their<br />
solutions into a working piece of software.</p><br />
<p>In the early part of the course, students use operators like map,<br />
foldr, zip,<br />
and iterate to express computations. Explicit recursion is introduced<br />
after some<br />
experience with these common patterns of computation. Examples and<br />
problems<br />
address non-numeric applications, for the most part. Both interactive<br />
and file<br />
I/O are covered, but general purpose monads are not.</p><br />
<p>The last 5 to 6 weeks of the course use C, and most of the projects<br />
in that<br />
part of the course duplicate the function of earlier pieces of software<br />
that the<br />
students have written in Haskell.</p><br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:Jonathan.Hill@comlab.ox.ac.uk Jonathan Hill]<br />
Oxford University Computing Laboratory<br><br />
<b>Course:</b> Functional Programming for the Integrated Graduate Development Programme in Software Engineering at Oxford University.<br><br />
<b>Student background:</b> Discrete mathematics (the course is a part time MSc for people from industry; most are from IBM or Nortel).<br><br />
<b>Materials:</b> Gofer (an old version, with a stripped down prelude---no parameter classes!); Own course material<br><br />
<b>Web page:</b> http://www.comlab.ox.ac.uk/igdp/text/course06.html<br />
Note: Web pages not accessible. May be ... moved ? <br />
<br />
<br />
<b>Instructor:</b> [mailto:nxg@cs.nott.ac.uk Neil Ghani]<br />
School of Computer Science, University of Nottingham<br><br />
<b>Course:</b> Functional Programming<br><br />
<b>Student background:</b> None<br><br />
<b>Materials:</b> Hugs; Graham Hutton, Programming in Haskell; own lecture slides<br><br />
<b>Web page:</b> http://www.cs.nott.ac.uk/~nxg/G51FUN06/fun.html<br />
<br />
<b>Instructor:</b> [mailto:prins@cs.unc.edu" Jan Prins]<br />
UNC Chapel Hill<br><br />
<b>Course:</b> Introduction to Functional Programming<br><br />
<b>Student background:</b> solid background in high-school science and mathematics<br><br />
<b>Materials:</b> Hugs 1.4 incl. Active Haskell, FRAN and [[Haskore]]; Simon Thompson, "Haskell: The Art of Functional Programming"<br><br />
<b>Web page:</b> http://www.cs.unc.edu/~prins/Classes/15/<br><br />
<b>Comments:</b><br />
<blockquote><br />
(Introductory programming course for CS and math/science majors, typically Freshman and Sophomores. Class size ~60)<br />
<br />
Our undergraduate computing environment is now largely<br />
PCs running Windows NT. We use NTEmacs as the programming<br />
environment with a slightly modified version of Emacs hugs<br />
mode with hugs running as a subprocess. The combined<br />
hugs/NTEmacs/Active Haskell distribution (available through<br />
course home page) is installed on 400+ public Win NT machines<br />
on campus and some unknown number of student-owned Win 95/98<br />
machines.<br />
<br />
This arrangement is new this semester, but so far has been<br />
working well. Keystroke-oriented interactive applications<br />
may be problematic with hugs running in NTEmacs shell mode.<br />
<br />
I'm planning assignments using Fran and Active Haskell and<br />
will try teaching the "brief introduction to imperative<br />
programming" at the end of the class using monads. I would<br />
be interested in talking with anyone who has experience or<br />
suggestions along these lines.<br />
<br />
I took a cue from Paul Hudak and others and have occasional<br />
appearances of MS Agents during lectures to wake students up!<br />
<br />
This is my first time teaching this course, and I would<br />
enjoy talking to others teaching at a similar level. A<br />
cursory search on the web didn't reveal many courses<br />
in this category.<br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:dave@cs.chalmers.se David Sands]<br />
University of Gothenburg & Chalmers University of Technology<br><br />
<b>Course:</b> Programmering för Naturvetare<br><br />
<b>Student background:</b> New students<br><br />
<b>Materials:</b> hugs 1.4; Simon Thompson<br><br />
<b>Web page:</b> http://www.md.chalmers.se/Cs/Grundutb/Kurser/nptah/<br><br />
<b>Comments:</b><br />
<blockquote><br />
This is the first part of a first course in programming. About 16<br />
lectures, each 2x45 mins plus weekly exercise classes and three<br />
assessed programming exercises. Most of my materials are in English.<br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:M.A.Rodrigues@dcs.hull.ac.uk Marcos A Rodrigues]<br />
The University of Hull, Hull, UK<br><br />
<b>Course:</b> Functional and Logic Programming<br><br />
<b>Student background:</b> none<br><br />
<b>Materials:</b> hugs 1.4; Haskell: the Craft of Functional Programming. Thompson S., Addison Wesley, 1996.<br><br />
<br />
<b>Instructor:</b> [mailto:Torsten.Grust@uni-konstanz.de Torsten Grust]<br />
University of Konstanz (Germany)<br> <br />
<b>Course:</b> Deklarative Programmierung (Declarative Programming, in german)<br><br />
<b>Student background:</b> basic math, no programming background required<br><br />
<b>Materials:</b> Hugs 1.4; (~300) slides available from the course web page;<br />
Jeroen Fokker's classroom text: Functional Programming<br />
http://www.cs.uu.nl/~jeroen/courses/fp-eng.ps.gz</a>;<br />
Richard Bird, Phil Wadler: Introduction to Functional Programming; Simon Peyton-Jones: Implementation of Functional Programming Languages<br><br />
<b>Web page:</b> http://www.fmi.uni-konstanz.de/dbis/Courses-old/Courses-ss98/decl-ss98.html<br><br />
<b>Comments:</b><br />
<blockquote><br />
The course is in German only (sorry about that). It additionally<br />
features an introduction to logical programming and Prolog.<br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:richardb@cse.unsw.edu.au Richard Buckland]<br />
University of New South Wales<br><br />
<b>Course:</b> Computing 1A<br><br />
<b>Student background:</b> Mixed, some have no computing<br />
background. This is our cs1 subject.<br><br />
<b>Materials:</b> Hugs 1.4; Simon Thompson<br><br />
<b>Web page:</b> http://www.cse.unsw.edu.au/~cs1011<br><br />
<br />
<br />
<b>Instructor:</b> [mailto:robert@techfak.uni-bielefeld Robert Giegerich], Stefan Posch, University Bielefeld, Germany<br><br />
<b>Course:</b> Introduction to Computer Science<br><br />
<b>Student background:</b> Completed High School (Abitur)<br><br />
<b>Materials:</b> Hugs; Class Notes by Robert Giegerich and Ralf Hinze<br><br />
<b>Comments:</b><br />
<blockquote><br />
Our first semester course<br />
uses Haskell as a vehicle to fundamental aspects of computation:<br />
algorithmics, specification and verification, efficiency analysis,<br />
programming methods. This works wonderfully. We do not require previous<br />
or additional programming experience. Haskell is quickly learned, <br />
to the necessary degreee; we make no attempt to cover the full language.<br />
This is NOT a Haskell course! Haskell allows us to speak about concepts<br />
of computer science WITHOUT a lot of language learning. And Haskell<br />
even helps to keep out detrimental habits from previous programming<br />
experience, as well as motivational problems resulting from the widely<br />
differing previous experiences of our incoming students.<br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:hj@sm.luth.se Håkan Jonsson] Luleå University of Technology, Sweden<br><br />
<b>Course:</b> SMD001, functional programming<br><br />
<b>Student background:</b> <br />
None. This is the very first programming course <br />
our students take.<br><br />
<b>Materials:</b> <br />
Materials: Simon Thompson's Haskell book + 7 laboratory/programming <br />
assignments using Hugs.<br />
<br><br />
<b>Web page:</b>http://www.sm.luth.se/csee/courses/smd/001/ (mostly Swedish)<br> <br />
<br />
<br />
<b>Instructor:</b> [mailto:Clem.Baker-Finch@cs.anu.edu.au Clem Baker-Finch, Australian National University<br><br />
<b>Course:</b>Introduction to Programming and Algorithms<br><br />
<b>Student background:</b> No programming background was<br />
assumed.<br />
<br><br />
<b>Materials:</b> GHC, GHCi, Simon Thompson 1st ed., my own materials. <br />
<br><br />
<b>Web page:</b> http://cs.anu.edu.au/Student/comp1100/<br> <br />
<b>Comments:</b><br />
<blockquote><br />
The first 75% of the course is basic programming concepts using Haskell. The remainder covers the same concepts in Java. This is reinforced - hopefully - by the third assignment (in Java) being the same as the first assignment (in Haskell). The aim is to provide a managed transition to the course which follows in second semester. Another point of possible interest is the use of a simple graphics library, ANUPlot, built on top of the OpenGL binding. See http://code.google.com/p/anuplot/<br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:lyndon@cs.uwa.edu.au Lyndon While] The University of Western Australia<br><br />
<b>Course:</b> Foundations of Computer Science<br><br />
<b>Student background:</b> None<br><br />
<b>Materials:</b> hugs 98; Thompson.<br><br />
<b>Web page:</b> http://undergraduate.cs.uwa.edu.au/courses/230.123<br><br />
<br />
<br />
<b>Instructor:</b> [http://www.cs.us.es/~jalonso José A. Alonso Jiménez] Dept of Computer Science and A.I., University of Seville, Spain<br><br />
<b>Course:</b> Informatics (Inform&aacute;tica, in spanish)<br><br />
<b>Student background:</b> None. This is the very first programming course <br />
our students take.<br><br />
<b>Materials:</b> GHCi, Emacs, Graham Hutton: &quot;Programming in Haskell&quot;, Slides, Exercises, Exams <br><br />
<b>Web page:</b> http://www.cs.us.es/~jalonso/cursos/i1m (in spanish)<br><br />
<b>First run:</b> 2009–2010<br><br />
<b>Last run:</b> 2012–2013<br />
<br />
----<br />
<br />
== Haskell as a second language ==<br />
<br />
These courses teach Haskell to students that have already learned<br />
another language.<br />
<br />
<b>Instructor:</b> [mailto:page@ou.edu Rex Page]<br />
University of Oklahoma<br><br />
<b>Course:</b> Discrete Mathematics<br><br />
<b>Student background:</b> High-school mathematics, introductory programming<br />
course (any language)<br><br />
<b>Materials:</b> Lecture notes, Projects, Exams, Solutions, Proof checking<br />
tools, etc.; text: Hall and O'Donnell, &quot;Discrete Mathematics with a<br />
Computer&quot;<br><br />
<br />
<b>Web page:</b> http://www.cs.ou.edu/~beseme/<br><br />
<b>Comments:</b><br />
<blockquote><br />
Lecture notes comprise over 350 animated slides (all both PowerPoint and<br />
PDF<br />
formats). About two-thirds of the material centers around mathematical logic.<br />
After the introduction of predicates, all of the examples in the logic<br />
portion<br />
of the course involve reasoning about properties of software, most of which is<br />
expressed in Haskell (a few are conventional looping functions).<br />
<p>Software examples include sum, sequence concatenation, logical operations on<br />
sequences, the Russian peasant algorithm, insertion and lookup in AVL <br />
trees, and<br />
other computations. Most of the properties verified relate to aspects of <br />
program<br />
correctness, but resource utilization properties are also verified in <br />
some<br />
cases. Several semesters worth of exams (finals and exams given during <br />
the term)<br />
are provided. The slides have matured through several offerings of the course.</p><br />
<p>The remaining third of the course discusses other standard topics<br />
in discrete<br />
mathematics, such as sets, functions, relations, trees, and counting.<br />
The web<br />
page provides access to a preview of the material. Exams and solutions are<br />
protected by a login procedure (to increase the comfort level of<br />
instructors<br />
wishing to use them in courses). The web page provides a link through<br />
which<br />
instructors may gain access to the full website.</p><br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:labra@lsi.uniovi.es Jose Emilio Labra Gayo],<br />
Dept. of Computer Science (EUITIO) University of Oviedo<br><br />
<b>Course:</b> Logic and Functional Programming<br><br />
<b>Student background:</b> The course is oriented towards third year undergraduate students in computer science. Usually, the students have been<br />
introduced to imperative languages like Pascal and Object <br />
Oriented Languages like C++<br><br />
<b>Materials:</b> Hugs; R. Bird "Introd. to FP using Haskell" (2nd Ed), J. E. Labra Gayo. "Introduction to the Haskell Language" (in spanish).<br><br />
<b>Web page:</b> http://lsi.uniovi.es/~labra/plf.html (in spanish).<br />
My FP page: http://lsi.uniovi.es/~labra/FuncProg.html<br><br />
<br />
<br />
<b>Instructor:</b> [mailto:fruehr@willamette.edu Fritz Ruehr]<br />
Willamette University, Salem, Oregon, USA (a small Liberal Arts College, about 1 hour from Portland & OGI)<br><br />
<b>Course:</b> CS 451 Topics in Computer Science: Functional Programming<br><br />
<b>Student background:</b> Data structures (I may also have required discrete math)<br><br />
<b>Materials:</b> Hugs 1.4 beta (I also taught Scheme); Haskell: The Craft of Functional Programming by Simon Thompson (I also used my own on-line lecture notes and labs and Kent Dybvig's text on Scheme)<br><br />
<b>Web page:</b> http://www.willamette.edu/~fruehr/451/<br><br />
<b>Comments:</b><br />
<blockquote><br />
The notes and labs I have on-line are in pretty rough form: many slide <br />
points are just one-line topical stubs I used as reminders in lecture.<br />
Many of the on-line materials are not linked into the (out of date)<br />
home page.<br />
<br />
I hope to have the course approved for next Fall as a regular offering<br />
(i.e., not as a "special topic") and should have more extensive<br />
on-line materials up by then.<br />
<br />
Teaching "bi-lingually" in Haskell and Scheme seemed like a good idea<br />
at the time, but next time around I will use Haskell as the main vehicle,<br />
perhaps taking some time near the end of the course to highlight some<br />
other languages (Scheme, ML, Clean).<br />
<br />
Some of my students used Conal Elliot's Fran and Paul Hudak's Haskore<br />
and liked them a lot; I was nice to have some significantly-sized<br />
applications that seemed more practical and fun to show off at the end<br />
of the course (I should have demonstrated these things at the beginning<br />
of the course to help with motivation). Next time around I would like to<br />
have a "beginner's prelude" or similar available to avoid problems with<br />
classes in type inference, Int vs. Integer, etc. These problems were a<br />
constant annoyance during lectures.<br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:J.Hamer@cs.auckland.ac.nz John Hamer],<br />
University of Auckland<br><br />
<b>Course:</b> Logic and Functional Programming<br><br />
<b>Student background:</b> Year 2 programming + some discrete maths<br><br />
<b>Materials:</b> Hugs 98, Haskell School of Expression, Page "Two Dozen Short Lessons in Haskell",<br><br />
<b>Web page:</b> http://www.cs.auckland.ac.nz/compsci360fc<br><br />
<br />
<br />
<b>Instructor:</b> [mailto:lengauer@fmi.uni-passau.de Chris Lengauer]<br />
University of Passau<br><br />
<b>Course:</b> Functional Programming<br><br />
<b>Student background:</b> two years of CS study<br><br />
<b>Materials:</b> hugs; Richard Bird's new text (PHI)<br><br />
<b>Web page:</b> not reachable from outside Passau<br><br />
<br />
<br />
<b>Instructor:</b> [mailto:cunningham@cs.olemiss.edu Conrad Cunningham]<br />
University of Mississippi<br><br />
<b>Course:</b> Functional Programming<br><br />
<b>Student background:</b> official -- senior or graduate standing; actual -- introductory programming, data structures, and discrete math<br><br />
<b>Materials:</b> Hugs on Unix and MS Windows systems;<br />
Mostly use the instructor's own set of lecture notes. Also Simon Thompson's HASKELL: THE CRAFT OF FUNCTIONAL PROGRAMMING. Previously used the Bird and Wadler textbook<br><br />
<b>Web page:</b> http://www.cs.olemiss.edu/~hcc/csci555/<br><br />
<b>Comments:</b><br />
<blockquote><br />
Although I am not a researcher in FP, I enjoy teaching the FP course.<br />
Most of the students take to the course after a few weeks. Hugs works<br />
reasonably well, but, of course, more pedagogically oriented error messages<br />
and other support tools would be helpful.<br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:leavens@cs.iastate.edu Gary T. Leavens],<br />
Iowa State University<br><br />
<b>Course:</b> Programming Languages 1<br><br />
<b>Student background:</b> undergraduate course in compilers or programming languaages<br><br />
<b>Materials:</b> Hugs 1.4; Thompson's Haskell: The Craft of Programming<br><br />
<b>Web page:</b> http://www.cs.iastate.edu/~leavens/ComS541.html<br><br />
<b>Comments:</b><br />
<blockquote><br />
Be sure to tell your students how to debug programs.<br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:jtod@dcs.gla.ac.uk John O'Donnell]<br />
University of Glasgow<br><br />
<b>Course:</b> Functional Programming<br><br />
<b>Student background:</b> Programming (in Ada), Algorithmic Foundations<br><br />
<b>Materials:</b> Hugs; Simon Thompson's book on Haskell<br><br />
<b>Web page:</b> http://www.dcs.gla.ac.uk/courses/teaching/level2/modules/#FP2<br><br />
<br />
<b>Instructor:</b> [mailto:chitil@informatik.rwth-aachen.de Olaf Chitil],<br />
RWTH Aachen, Germany<br><br />
<b>Course:</b> Functional Programming in Haskell<br><br />
<b>Student background:</b> basic programming skills (not necessarily in a<br />
functional language)<br><br />
<b>Materials:</b> Hugs 1.4; Hugs user manual, slide copies;<br />
additionally the `Gentle Introduction to Haskell', probably Bird's `Introduction<br />
to Functional Programming using Haskell' in the future.<br><br />
<b>Web page:</b> http://www-i2.informatik.rwth-aachen.de/Praktikum/SWP/ (in German)<br><br />
<b>Comments:</b><br />
<blockquote><br />
The course starts with 4 full time days of learning Haskell. During the semester<br />
the students (in groups of 2 students) have to implement a compiler and an<br />
abstract machine for a simple imperative language. They are given parts of the<br />
system and a manual on how to do the remaining parts (they have no prior<br />
knowledge on compiler construction).<br />
The most difficult construct for students to understand is the monad. I<br />
introduce IO without mentioning monads. Later I explain how to build a simple<br />
exception handling system based on the type `Maybe a' / `Error a'. Only<br />
subsequently I give the general definition of monads and present the list monad<br />
and a simple state monad. However, I fear that just to understand the bind<br />
operator `>>=' requires people to be quite comfortable with higher-order<br />
functions.<br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [http://web.comlab.ox.ac.uk/oucl/people/richard.bird.html Richard Bird], Oxford Brookes University<br><br />
<b>Course:</b> Functional Programming<br><br />
<b>Student background:</b> Elementary structured programming<br><br />
<b>Web page:</b> http://web.comlab.ox.ac.uk/oucl/courses/topics00-01/fp/<br><br />
<br />
<br />
<b>Instructor:</b> [mailto:paul.hudak@yale.edu Paul Hudak],<br />
Yale University, Dept of Computer Science<br><br />
<b>Course:</b> Functional Programming<br><br />
<b>Student background:</b> at least one programming course<br><br />
<b>Materials:</b> Hugs; my own textbook, which is under preparation<br><br />
<b>Web page:</b> none<br><br />
<br />
<br />
<b>Instructor:</b> [mailto:abf@cs.ucc.ie Alex Ferguson]<br />
University College Cork<br><br />
<b>Course:</b> Functional and Logic Programming<br><br />
<b>Student background:</b> Final year undergraduate<br />
<br><br />
<b>Materials:</b> Final year undergraduate<br />
Materials: Hugs 98; ghc; Simon Thompson, "Haskell: The Craft of<br />
Functional Programming" (2nd ed.)<br />
<br><br />
<b>Web page:</b> http://yeats.ucc.ie/~abf/CS4001/<br> <br />
<b>Comments:</b><br />
<blockquote><br />
This is the declarative programming option for 4th year<br />
undergrads, who have Java as a first programming language, and some<br />
knowledge of C and C++. The current final year have had some exposure<br />
to Haskell in first year, though this is no longer the case for our<br />
current intake.<br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:lky@nada.kth.se Leif Kusoffsky],<br />
Royal Institute of Technology, Stockholm<br><br />
<b>Course:</b> Functional Programming 2D1370<br><br />
<b>Student background:</b> The course is oriented towards third year<br />
undergraduate students in computer science. The students<br />
have been introduced to imperative languages like<br />
C and Object Oriented Languages like Java<br />
<br><br />
<b>Materials:</b> Hugs; Hudak : The Haskell School of Expression<br />
<br><br />
<br />
<br />
<b>Instructor:</b> Jeremy Bobbio -- INSIA<br><br />
<b>Course:</b> Functional and Logic Programming<br><br />
<b>Student background:</b> One year CS<br />
<br><br />
<b>Materials:</b> <br />
Hugs, GHC, Paul Hudak's Haskell School of Education<br />
<br><br />
<b>Web page:</b> http://etudiants.insia.org/~jbobbio/pafp/ (french)<br> <br />
<br />
<br />
<b>Instructor:</b> [mailto:antkaij@mit.jyu.fi Antti-Juhani Kaijanaho]<br />
University of Jyväskylä<br><br />
<b>Course:</b> Functional Programming 1 & 2<br><br />
<b>Student background:</b> third-year undergraduate and up<br />
<br><br />
<b>Materials:</b><br />
GHC, Gtk2HS<br />
<br><br />
<b>Web page:</b> [http://www.mit.jyu.fi/antkaij/opetus/fo/2005-2006/index.en.html]<br />
<br><br />
<b>Last run:</b> 2005&ndash;2006<br />
<br><br />
<!--<b>Comments:</b><br />
<blockquote><br />
(I'll write this later)<br />
</blockquote>--><br />
<br />
<b>Instructor:</b> [mailto:djd@comp.leeds.ac.uk David Duke]<br />
University of Leeds, School of Computing<br><br />
<b>Course:</b> Functional Programming<br><br />
<b>Student background:</b> Second and third year undergraduate<br />
<br><br />
<b>Materials:</b> ghc; Graham Hutton "Programming in Haskell"<br />
<br><br />
<b>Web page:</b> www.comp.leeds.ac.uk/se23/<br> <br />
<b>Comments:</b><br />
<blockquote><br />
This is an optional course that students currently can take in <br />
second or third year (from 2008/9 it will be third-years only).<br />
Students will have previously used Python and Java.<br />
Although the emphasis is on learning to solve problems within<br />
the functional paradigm, and how to develop solutions within<br />
Haskell, I also like to show students what is "under the<br />
bonnet" and conclude the module with an introduction to<br />
implementation issues, using material derived from<br />
"Implementing Functional Languages" by Simon Peyton Jones and <br />
David Lester. <br />
</blockquote><br />
<br />
<b>Instructor:</b> [mailto:popavdan@yahoo.com Popa V. Dan]<br />
University of Bacau, Romania <br><br />
<b>Course:</b> "Limbaje formale si automate" (Formal languages and automata) <br><br />
<b>Student background:</b> second-year undergraduate <br />
<br><br />
<b>Materials:</b> Hugs 98 (2002 revised version) included in Mandriva (Formely Mandrake) 10.0 Linux Distribution<br />
<br><br />
<b>Web page:</b> Not yet. Try the page of the "ro" community on www.haskell.org<br />
<br> [http://www.haskell.org/haskellwiki/Ro/Haskell Ro/Haskell webpage is here] <br><br />
<b>First run:</b> 2006&ndash;2007<br />
<br><br />
<br />
Haskell is used as an implementation languages in student's laboratories.<br />
The ideea was to provide a language powerfull enough to be able to express <br />
how to build a parser starting from a grammmar. The students are able<br />
to build small (monadic) interpreters for "while-languages" using a <br />
recommanded monad and a recommanded back-end. The labs are focusing on the <br />
grammar of the languages, on the modular (monadic) parsing as a tool for <br />
verifying and processing inputs which are not validable by finite state <br />
automata but by context free grammmars. Adaptability of the language, <br />
especially obtained manipulating and improving syntax is also a target.<br />
<br />
Support (concerning Haskell): "O introducere in Haskell prin exemple" by<br />
Dan Popa, published in january 31,2007 by <br />
[http://www.edusoft.ro Edusoft](in romanian) Contact the author if needed .<br />
<br />
Other recommanded books: "Gentle Introd to Haskell 98" and YAHT <br />
Recomanded papers: All about monadic parsing. <br />
Special message for Graham Hutton, Erik Meijer and P. Wadler and all <br />
other authors with similar interests from the Haskell <br />
community:<br />
<br />
Thank you very much for your papers concerning Monadic parsing and <br />
interpreters ! <br><br />
<br />
<br />
'''List of Instructors:''' Involved people [http://www.pdep.com.ar/Home/quines-somos [1]] National and Technological University, Buenos Aires, Argentina Universidad Tecnológica Nacional - Facultad Regional Buenos Aires)<br><br />
'''Course:''' Programming Paradigms <br><br />
'''Student background:''' This is a second-year undergraduate course. Students have already been introduced to basic structured programming concepts. <br><br />
'''Materials:''' Pharo Smalltalk; LOOP [http://www.esug.org/wiki/pier/Conferences/2011/InnovationTechnologyAwards [2]] , SWI-Prolog, Hugs, GHC, "Learn You a Haskell For a Great Good" (Spanish Version) <br><br />
'''Web page:''' You can find our homepage in [www.pdep.com.ar here].<br />
<br />
<br />
<blockquote><br />
Students are being introduced to three main programming paradigms: <br><br />
<br />
• Object Oriented Programming <br><br />
• Logical Programming <br><br />
• Functional Programming <br><br />
</blockquote><br />
<br />
----<br />
<br />
== Comparative programming languages ==<br />
<br />
These courses teach general programming language principles, with<br />
Haskell as an example of a functional language.<br />
<br />
<b>Instructor: </b> Ruediger Marcus Flaig, University of Heidelberg (Germany)<br />
<br><br />
<b>Course:</b> An introduction to programming in bioinformatics <br><br />
<b>Student background:</b> different, but generally low<br><br />
<b>Materials:</b> Hugs-98 and lots of other stuff<br />
<br><br />
<b>Web page:</b> http://www.sanctacaris.net/rc.html<br> <br />
<b>Comments:</b><br />
<blockquote><br />
This course is designed to introduce life science students,<br />
that is to say, going-to-be biologists, physicians, biotechnologists<br />
and maybe others, to solving real-life problems (such as DNA sequence<br />
handling and analysis). Emphasis will be on paradigms (imperative /<br />
OO, functional, declarative). Although -- in order not to frighten<br />
people -- the official announcement mentions only Python, Haskell will<br />
be presented as THE purely functional language, and all solutions may<br />
be presented in either Python, Haskell or Java. I am very curious<br />
about the feedback I'll get, and maybe next term we shall focus more<br />
on Haskell. What I'd really need, though, is some life science related<br />
package for Haskell, such as BIOPYTHON and BIORUBY. <br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:ham@cs.utexas.edu Hamilton Richards],<br />
University of Texas (Austin)<br><br />
<b>Course:</b> Programming Languages (taught in 2005)<br><br />
<b>Student background:</b> <br><br />
<b>Materials:</b> Hugs 1.4; Sethi, Davie.<br><br />
<b>Web page:</b> http://www.cs.utexas.edu/users/ham/UTCS/CS345/<br><br />
<b>Comments:</b><br />
<blockquote><br />
I'm using Haskell in a programming-languages course, but it's distributed<br />
somewhat piecemeal through the course. Probably adds up to something like<br />
3-4 weeks (out of 15).<br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [http://www.cs.waikato.ac.nz/~marku Mark Utting]<br />
University of Waikato (New Zealand)<br />
<b>Course:</b> Programming Languages<br><br />
<b>Student background:</b> Two years of C++ and 1 year of Haskell<br><br />
<b>Materials:</b> Textbook "Programming Languages", Louden.<br />
<b>Web page:</b> http://www.cs.waikato.ac.nz/~marku/313<br><br />
<b>Comments:</b><br />
<blockquote><br />
The course covers at least two languages in each of the<br />
main paradigms (object-oriented, functional and logic programming),<br />
plus history, semantics and implementation issues.<br />
The Haskell section is about 2 weeks long and usually focusses on <br />
programming with higher-order functions and how that enables the<br />
language to be extended in application-specific ways<br />
(parser combinators, html-generation combinators etc.)<br />
</blockquote><br />
<br />
<b>Instructor:</b> [mailto:zeeshan@apiit.edu.pk M Zeeshan Ali Ansari],<br />
Asia Pacific Institute of Information Technology (Pakistan)<br><br />
<b>Course:</b> Advanced Programming Language Concepts<br><br />
<b>Student background:</b> Students having studied and worked on Imperative Programming Languages <br><br />
<b>Materials:</b> The Craft of Haskell, A Gentle Introduction to Haskell, Yet Another Haskell Tutorial.<br><br />
<b>Web page:</b> http://www.apiit.edu.pk<br><br />
<b>Comments:</b><br />
<blockquote><br />
This course compares and contrasts various programming language paradigms including Functional Programming. Out of 13 week course 5 to 6 of them are dedicated towards Haskell. The material is basically written in a way that enables imperative language programmers to understand the concepts and power of functional programming <br />
<br />
http://www.haskell.org/sitewiki/images/3/3d/Functional_Programming_Tutorial_By_Zeeshan_Ali_Ansari.doc<br />
<br />
<br />
</blockquote><br />
<br />
<b>Instructor:</b> John C. Mitchell,<br />
Stanford University<br><br />
<b>Course:</b> Programming Languages<br><br />
<b>Student background:</b> Some experience with Lisp/C/object-oriented languages.<br><br />
<b>Materials:</b> Concepts in Programming Languages (new Haskell chapters written with Kathleen Fisher)<br><br />
<b>Web page:</b> http://cs242.stanford.edu<br><br />
<b>Comments:</b><br />
<blockquote><br />
Central concepts in modern programming languages, impact on software development, language design trade-offs, and implementation considerations. Functional, imperative, and object-oriented paradigms. Formal semantic methods and program analysis. Modern type systems, higher order functions and closures, exceptions and continuations. Modularity, object-oriented languages, and concurrency. Runtime support for language features, interoperability, and security issues. <br />
</blockquote><br />
<br />
----<br />
<br />
== Advanced functional programming using Haskell ==<br />
<br />
These courses deal with the advanced issues such as semantics, type<br />
systems, or compilers. Includes a other advanced courses taught using<br />
Haskell. <br />
<br />
<b>Instructor:</b> [mailto:gmh@cs.nott.ac.uk Graham Hutton]<br />
School of Computer Science, University of Nottingham<br><br />
<b>Course:</b> Advanced Functional Programming<br><br />
<b>Student background:</b> At least one year of CS, including a course in Haskell<br><br />
<b>Materials:</b> Hugs; GHC; Graham Hutton, Programming in Haskell; own course material<br><br />
<b>Web page:</b> http://www.cs.nott.ac.uk/~gmh/afp.html<br />
<br />
<b>Instructor:</b> [mailto:rjmh@cs.chalmers.se John Hughes]<br />
Chalmers University, Gothenburg<br><br />
<b>Course:</b> Advanced Functional Programming<br><br />
<b>Student background:</b> General CS maturity; from this year most students have already used Haskell in introductory courses.<br><br />
<b>Materials:</b> Mainly hbc.; Papers (see web page)<br><br />
<b>Web page:</b> http://www.cs.chalmers.se/~rjmh/AFP<br><br />
<b>Comments:</b><br />
<blockquote><br />
The goal is to teach students how to solve substantial problems in a<br />
functional language --- `functional programming in anger', one might say. The<br />
emphasis is on design and use of suitable combinator libraries to simplify<br />
applications. Material covered includes monad design, use of CPS style,<br />
libraries for parsing, pretty-printing, and GUIs (presently fudgets). <br />
<br />
The course is taught in a `problem based' manner: lectures are few, while<br />
students solve three substantial programming problems during the term, with<br />
plenty of backup via group meetings. I adopted this teaching form three years<br />
ago, and it has led students to develop far better practical skills than most<br />
obtained from my earlier `lectures and exercises' courses, and I believe to<br />
use Haskell much more after the course's end.<br />
<br />
This course is optional in the third or fourth year, and is taken by a<br />
small-to-medium sized group of students.<br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:Olof.Johanssson@cs.umu.se Olof Johansson], Umeå Univesity, Department of Computing Science<br><br />
<b>Course:</b> Programming language semantics<br><br />
<b>Student background:</b> two terms of computer science studies and specificaly a course Programming language concepts<br><br />
<b>Materials:</b> Hugs and some HBC and GHC; Watt, Programming language, Syntax and Semantics<br><br />
<b>Web page:</b> http://www.cs.umu.se/local/kurser/TDBC05 (Only in swedish)<br> <br />
<br />
<br />
<b>Instructor:</b> [mailto:lyndon@cs.uwa.edu.au Lyndon While]<br />
The University of Western Australia<br><br />
<b>Course:</b> Functional Programming<br><br />
<b>Student background:</b> OOP, plus most of them have used Haskell previously<br><br />
<b>Materials:</b> hugs 98; none of the recent books really fit<br><br />
<b>Web page:</b> http://undergraduate.cs.uwa.edu.au/courses/230.301<br><br />
<b>Instructor:</b> [mailto:F.A.Rabhi@dcs.hull.ac.uk Fethi Rabhi],<br />
University of Hull (UK)<br><br />
<b>Course:</b> AI Problem Solving Techniques (using Haskell and Prolog)<br><br />
<b>Student background:</b> Haskell and Prolog programming<br><br />
<b>Materials:</b> HUGS; Thompson'96, own notes (soon to be published as a book).<br><br />
<b>Web page:</b> none<br><br />
<b>Comments:</b><br />
<blockquote><br />
It is very hard to justify learning Haskell unless it can be<br />
demonstrated in very practical situations (hence the provision<br />
of the above course).<br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:karczma@info.unicaen.fr Jerzy Karczmarczuk]<br />
University of Caen, Caen (France)<br> No links in the fr-Haskell page. Why not ?<br />
<b>Course:</b> Compilation<br><br />
<b>Student background:</b> General CS knowledge; students (should...) know Scheme and imperative languages, also some theory of languages and automata.<br><br />
<b>Materials:</b> <br />
Hugs, GHC, now also GHCi, and their documentation. Handouts: (still a little incomplete)<br />
Impossible to find the foolowing matterials.Files can not be found. <br />
* http://users.info.unicaen.fr/~karczma/matrs/Maitcomp/compilation_a.pdf<br />
* http://users.info.unicaen.fr/~karczma/matrs/Maitcomp/compilation_b.pdf<br />
* http://users.info.unicaen.fr/~karczma/matrs/Maitcomp/compilation_c.pdf<br />
<b>Comments:</b><br />
<blockquote><br />
This is a compulsory semestrial course in fourth year. Weekly: 1.5h<br />
course, 2.5H practice.<br />
One, but comprehensive assignment, taking 2 months or more.<br />
askell is our main coding tool. A little time is devoted by necessity<br />
to the language<br />
itself, but also from the perspective: "how would you compile such a<br />
language".<br />
"Standard stuff", such as parsing combinators, etc.is covered, but we<br />
don't begin with that.<br />
We start with the construction of small interpreters: from recursive<br />
Lisp-style to postfix,<br />
(Forth/PostScript style) constructing this last by partial evaluation<br />
(intuitively).<br />
We introduce control structures as lazy functions, operation<br />
sequencing through continuations,<br />
monads not only for parsing, but also for exceptions and<br />
non-determinism.<br />
We discuss (simply) the type inference. The code generator assembles a<br />
linear code by lazy<br />
concatenation of chunks which makes it trivial to deal with loops and<br />
cross-referencing<br />
fragments. Algorithms of garbage collection are presented (not<br />
implemented, though...) in<br />
a purely functional style.<br />
<br />
Students' opinion: "Frightening at first. Learning curve steep, but<br />
much less time spent on debugging, coding proficiency comes fast. Good for<br />
understanding what the compilation is about, but difficult to make a<br />
complete running program with all the I/O, etc.<br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:jeffm@cse.uconn.edu Jeffrey A. Meunier], University of Connecticut<br><br />
<b>Course:</b> CSE240 Intermediate Computer Systems<br><br />
<b>Student background:</b> computer/microprocessor organization<br />
<br><br />
<b>Materials:</b> Hugs (Feb 2001); Bird ``Introduction to Functional<br />
Programming''; Furber ``ARM System-on-Chip Architecture''<br />
<br><br />
<b>Web page:</b> http://www.engr.uconn.edu/~jeffm/Classes/CSE240-Spring-2001/index.html<br> <br />
<b>Comments:</b><br />
<blockquote><br />
This is a course in the low level programming of microprocessor systems.<br />
The course will focus on the development of an emulator (virtual<br />
machine, or VM) for a small computer system based on a modern RISC<br />
microprocessor (the ARM CPU) using a high level programming language<br />
(Haskell), and assembly language programming of the VM. Development of<br />
the VM will occur in stages, starting with the simple direct-execution<br />
(stream-based) model, gradually moving to a more realistic memory-mapped<br />
model, including exception handlers, concurrent processes, and<br />
asynchronous external devices.<br />
</blockquote><br />
<br />
<b>Instructor:</b> Gabriele Keller<br />
The University of New South Wales<br><br />
<b>Course:</b> Concepts of Programming Languages<br><br />
<b>Student background:</b> Most of them have used Haskell in first year<br><br />
<b>Materials:</b> GHC, TaPL and `Programming Languages: Theory and Practice', papers<br><br />
<b>Web page:</b> http://www.cse.unsw.edu.au/~cs3161<br><br />
<b>Last run:</b> 2006<br><br />
<b>Comments:</b><br />
<blockquote><br />
Expose students to a theory of programming languages based on type<br />
theory and operational semantics as a mathematically sound framework<br />
which allows us to investigate the properties of a large number of<br />
programming language features, including:<br />
<br />
* on semantics of different programming languages and programming paradigms: imperative, object oriented, and declarative.<br />
* theoretical foundations of programming languages: syntax, operatational, axiomatic and denotational semantics.<br />
* implementation aspects of central language features, such as dynamic and strong typing, polymorphism, overloading and automatic memory management<br />
<br />
Assignments are in GHC/Haskell, and in the past have included implementing a<br />
mini-Haskell type checker, type inference and interpreter.<br />
</blockquote><br />
<br />
<b>Instructor:</b> Manuel Chakravarty<br />
The University of New South Wales<br><br />
<b>Course:</b> Advanced Functional Programming<br><br />
<b>Student background:</b> Most of them have used Haskell in first year<br><br />
<b>Materials:</b> GHC, papers (see the website)<br><br />
<b>Web page:</b> http://www.cse.unsw.edu.au/~cs4132<br><br />
<b>Last run:</b>2004<br><br />
<b>Comments:</b><br />
<blockquote><br />
To provide students with an understanding of the theory and practice of<br />
the design, use, and implementation of functional programming languages,<br />
such as Haskell<br />
<br />
This includes selected topics from the following areas:<br />
<br />
* Foundations: lambda calculus, semantics, and type systems.<br />
* Design: side-effects, exceptions, concurrency, and parallelism.<br />
* Implementation: abstract machines, program transformation, and memory management. <br />
* Programming techniques: combinator libraries, monads, generic programming, and meta programming.<br />
* Applications: domain specific languages, graphics, web programming, reactive systems, and scientific programming.<br />
</blockquote><br />
<br />
[[Category:Community]]</div>Aivanhttps://wiki.haskell.org/index.php?title=Haskell_in_education&diff=55922Haskell in education2013-05-13T15:21:10Z<p>Aivan: /* Haskell as a second language */</p>
<hr />
<div>[[Category:Education]]<br />
This is a collection of material of interest to those teaching or<br />
taking courses that use Haskell. There is also a more general site,<br />
http://www.cs.kun.nl/fple/, devoted to all functional languages. The proceedings of the latest<br />
[http://www.informatik.uni-kiel.de/~mh/publications/reports/fdpe02/ International Workshop on Functional and Declarative Programming in Education (FDPE)] are now available.<br />
Some of the lecture notes and<br />
other course material found in these web pages are excellent<br />
supplements to the available text books.<br />
If you would like to use lecture<br />
notes, assignments, or other material found in these course web pages<br />
please contact the author for permission.<br />
<br />
Most of the entries are years old. When you add your own new<br />
material to this page, please also say when the course was run for the last time.<br />
<br />
The results of a survey of university courses using Haskell in the academic year 2005-2006 can be found [http://www.cs.chalmers.se/~rjmh/Wash/Survey/teaching.htm here]. Also, some news were added during the 2006-2007 academic year.<br />
<br />
== Suitable Course Textbooks ==<br />
<br />
See [[Books#Textbooks]].<br />
<br />
== Haskell as a first language ==<br />
<br />
These courses teach Haskell to students with no background in programming.<br />
<br />
<b>Instructor:</b> [http://homepages.inf.ed.ac.uk/wadler/ Philip Wadler] University of Edinburgh<br><br />
<b>Course:</b> [[Informatics 1 - Functional Programming]]<br><br />
<b>Materials:</b> GHCi, Emacs, Thompson: Haskell, the Craft of Functional Programming<br><br />
<b>Web page:</b> http://www.inf.ed.ac.uk/teaching/courses/inf1/fp/ <br><br />
<br />
<br />
<b>Instructor:</b> [mailto:page@ou.edu Rex Page] <br />
University of<br />
Oklahoma<br><br />
<b>Course:</b> Introduction to Computer Programming<br><br />
<b>Student background:</b> High-school mathematics<br><br />
<b>Materials:</b> Projects, Exams, Downloadable textbook: Rex Page, <br />
&quot;Two<br />
Dozen Short Lessons in Haskell&quot;<br><br />
<b>Web page:</b> http://www.cs.ou.edu/~rlpage/fpclassSpring97/<br />
<br />
<b>Comments:</b><br />
<blockquote><br />
These materials arose from a course offered for three consecutive<br />
semesters as<br />
an alternative to our usual first course in programming. Most of the<br />
students<br />
who took the course graduated in the past two years, and many of them<br />
cited it<br />
in the exit interview with the department chair as the most influential<br />
course<br />
in the entire academic career.<br />
<p>All materials for two offerings of the course are available through<br />
the web<br />
page. This includes individual projects, team projects, project<br />
solutions,<br />
exams, supplied software (connected with certain projects), tips for<br />
students<br />
taking the course, FAQs addressing questions that students asked during<br />
the<br />
semester, and a short textbook which served as the primary text in the<br />
course.</p><br />
<p>The first 10 to 11 weeks of the course use Haskell. Students are<br />
required to<br />
write nine programs in Haskell, three of which are team projects that<br />
combine<br />
software developed in individual projects. Different members of a team<br />
are<br />
assigned different individual projects, and the team efforts combine<br />
their<br />
solutions into a working piece of software.</p><br />
<p>In the early part of the course, students use operators like map,<br />
foldr, zip,<br />
and iterate to express computations. Explicit recursion is introduced<br />
after some<br />
experience with these common patterns of computation. Examples and<br />
problems<br />
address non-numeric applications, for the most part. Both interactive<br />
and file<br />
I/O are covered, but general purpose monads are not.</p><br />
<p>The last 5 to 6 weeks of the course use C, and most of the projects<br />
in that<br />
part of the course duplicate the function of earlier pieces of software<br />
that the<br />
students have written in Haskell.</p><br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:Jonathan.Hill@comlab.ox.ac.uk Jonathan Hill]<br />
Oxford University Computing Laboratory<br><br />
<b>Course:</b> Functional Programming for the Integrated Graduate Development Programme in Software Engineering at Oxford University.<br><br />
<b>Student background:</b> Discrete mathematics (the course is a part time MSc for people from industry; most are from IBM or Nortel).<br><br />
<b>Materials:</b> Gofer (an old version, with a stripped down prelude---no parameter classes!); Own course material<br><br />
<b>Web page:</b> http://www.comlab.ox.ac.uk/igdp/text/course06.html<br />
Note: Web pages not accessible. May be ... moved ? <br />
<br />
<br />
<b>Instructor:</b> [mailto:nxg@cs.nott.ac.uk Neil Ghani]<br />
School of Computer Science, University of Nottingham<br><br />
<b>Course:</b> Functional Programming<br><br />
<b>Student background:</b> None<br><br />
<b>Materials:</b> Hugs; Graham Hutton, Programming in Haskell; own lecture slides<br><br />
<b>Web page:</b> http://www.cs.nott.ac.uk/~nxg/G51FUN06/fun.html<br />
<br />
<b>Instructor:</b> [mailto:prins@cs.unc.edu" Jan Prins]<br />
UNC Chapel Hill<br><br />
<b>Course:</b> Introduction to Functional Programming<br><br />
<b>Student background:</b> solid background in high-school science and mathematics<br><br />
<b>Materials:</b> Hugs 1.4 incl. Active Haskell, FRAN and [[Haskore]]; Simon Thompson, "Haskell: The Art of Functional Programming"<br><br />
<b>Web page:</b> http://www.cs.unc.edu/~prins/Classes/15/<br><br />
<b>Comments:</b><br />
<blockquote><br />
(Introductory programming course for CS and math/science majors, typically Freshman and Sophomores. Class size ~60)<br />
<br />
Our undergraduate computing environment is now largely<br />
PCs running Windows NT. We use NTEmacs as the programming<br />
environment with a slightly modified version of Emacs hugs<br />
mode with hugs running as a subprocess. The combined<br />
hugs/NTEmacs/Active Haskell distribution (available through<br />
course home page) is installed on 400+ public Win NT machines<br />
on campus and some unknown number of student-owned Win 95/98<br />
machines.<br />
<br />
This arrangement is new this semester, but so far has been<br />
working well. Keystroke-oriented interactive applications<br />
may be problematic with hugs running in NTEmacs shell mode.<br />
<br />
I'm planning assignments using Fran and Active Haskell and<br />
will try teaching the "brief introduction to imperative<br />
programming" at the end of the class using monads. I would<br />
be interested in talking with anyone who has experience or<br />
suggestions along these lines.<br />
<br />
I took a cue from Paul Hudak and others and have occasional<br />
appearances of MS Agents during lectures to wake students up!<br />
<br />
This is my first time teaching this course, and I would<br />
enjoy talking to others teaching at a similar level. A<br />
cursory search on the web didn't reveal many courses<br />
in this category.<br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:dave@cs.chalmers.se David Sands]<br />
University of Gothenburg & Chalmers University of Technology<br><br />
<b>Course:</b> Programmering för Naturvetare<br><br />
<b>Student background:</b> New students<br><br />
<b>Materials:</b> hugs 1.4; Simon Thompson<br><br />
<b>Web page:</b> http://www.md.chalmers.se/Cs/Grundutb/Kurser/nptah/<br><br />
<b>Comments:</b><br />
<blockquote><br />
This is the first part of a first course in programming. About 16<br />
lectures, each 2x45 mins plus weekly exercise classes and three<br />
assessed programming exercises. Most of my materials are in English.<br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:M.A.Rodrigues@dcs.hull.ac.uk Marcos A Rodrigues]<br />
The University of Hull, Hull, UK<br><br />
<b>Course:</b> Functional and Logic Programming<br><br />
<b>Student background:</b> none<br><br />
<b>Materials:</b> hugs 1.4; Haskell: the Craft of Functional Programming. Thompson S., Addison Wesley, 1996.<br><br />
<br />
<b>Instructor:</b> [mailto:Torsten.Grust@uni-konstanz.de Torsten Grust]<br />
University of Konstanz (Germany)<br> <br />
<b>Course:</b> Deklarative Programmierung (Declarative Programming, in german)<br><br />
<b>Student background:</b> basic math, no programming background required<br><br />
<b>Materials:</b> Hugs 1.4; (~300) slides available from the course web page;<br />
Jeroen Fokker's classroom text: Functional Programming<br />
http://www.cs.uu.nl/~jeroen/courses/fp-eng.ps.gz</a>;<br />
Richard Bird, Phil Wadler: Introduction to Functional Programming; Simon Peyton-Jones: Implementation of Functional Programming Languages<br><br />
<b>Web page:</b> http://www.fmi.uni-konstanz.de/dbis/Courses-old/Courses-ss98/decl-ss98.html<br><br />
<b>Comments:</b><br />
<blockquote><br />
The course is in German only (sorry about that). It additionally<br />
features an introduction to logical programming and Prolog.<br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:richardb@cse.unsw.edu.au Richard Buckland]<br />
University of New South Wales<br><br />
<b>Course:</b> Computing 1A<br><br />
<b>Student background:</b> Mixed, some have no computing<br />
background. This is our cs1 subject.<br><br />
<b>Materials:</b> Hugs 1.4; Simon Thompson<br><br />
<b>Web page:</b> http://www.cse.unsw.edu.au/~cs1011<br><br />
<br />
<br />
<b>Instructor:</b> [mailto:robert@techfak.uni-bielefeld Robert Giegerich], Stefan Posch, University Bielefeld, Germany<br><br />
<b>Course:</b> Introduction to Computer Science<br><br />
<b>Student background:</b> Completed High School (Abitur)<br><br />
<b>Materials:</b> Hugs; Class Notes by Robert Giegerich and Ralf Hinze<br><br />
<b>Comments:</b><br />
<blockquote><br />
Our first semester course<br />
uses Haskell as a vehicle to fundamental aspects of computation:<br />
algorithmics, specification and verification, efficiency analysis,<br />
programming methods. This works wonderfully. We do not require previous<br />
or additional programming experience. Haskell is quickly learned, <br />
to the necessary degreee; we make no attempt to cover the full language.<br />
This is NOT a Haskell course! Haskell allows us to speak about concepts<br />
of computer science WITHOUT a lot of language learning. And Haskell<br />
even helps to keep out detrimental habits from previous programming<br />
experience, as well as motivational problems resulting from the widely<br />
differing previous experiences of our incoming students.<br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:hj@sm.luth.se Håkan Jonsson] Luleå University of Technology, Sweden<br><br />
<b>Course:</b> SMD001, functional programming<br><br />
<b>Student background:</b> <br />
None. This is the very first programming course <br />
our students take.<br><br />
<b>Materials:</b> <br />
Materials: Simon Thompson's Haskell book + 7 laboratory/programming <br />
assignments using Hugs.<br />
<br><br />
<b>Web page:</b>http://www.sm.luth.se/csee/courses/smd/001/ (mostly Swedish)<br> <br />
<br />
<br />
<b>Instructor:</b> [mailto:Clem.Baker-Finch@cs.anu.edu.au Clem Baker-Finch, Australian National University<br><br />
<b>Course:</b>Introduction to Programming and Algorithms<br><br />
<b>Student background:</b> No programming background was<br />
assumed.<br />
<br><br />
<b>Materials:</b> GHC, GHCi, Simon Thompson 1st ed., my own materials. <br />
<br><br />
<b>Web page:</b> http://cs.anu.edu.au/Student/comp1100/<br> <br />
<b>Comments:</b><br />
<blockquote><br />
The first 75% of the course is basic programming concepts using Haskell. The remainder covers the same concepts in Java. This is reinforced - hopefully - by the third assignment (in Java) being the same as the first assignment (in Haskell). The aim is to provide a managed transition to the course which follows in second semester. Another point of possible interest is the use of a simple graphics library, ANUPlot, built on top of the OpenGL binding. See http://code.google.com/p/anuplot/<br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:lyndon@cs.uwa.edu.au Lyndon While] The University of Western Australia<br><br />
<b>Course:</b> Foundations of Computer Science<br><br />
<b>Student background:</b> None<br><br />
<b>Materials:</b> hugs 98; Thompson.<br><br />
<b>Web page:</b> http://undergraduate.cs.uwa.edu.au/courses/230.123<br><br />
<br />
<br />
<b>Instructor:</b> [http://www.cs.us.es/~jalonso José A. Alonso Jiménez] Dept of Computer Science and A.I., University of Seville, Spain<br><br />
<b>Course:</b> Informatics (Inform&aacute;tica, in spanish)<br><br />
<b>Student background:</b> None. This is the very first programming course <br />
our students take.<br><br />
<b>Materials:</b> GHCi, Emacs, Graham Hutton: &quot;Programming in Haskell&quot;, Slides, Exercises, Exams <br><br />
<b>Web page:</b> http://www.cs.us.es/~jalonso/cursos/i1m (in spanish)<br><br />
<b>First run:</b> 2009–2010<br><br />
<b>Last run:</b> 2012–2013<br />
<br />
----<br />
<br />
== Haskell as a second language ==<br />
<br />
These courses teach Haskell to students that have already learned<br />
another language.<br />
<br />
<b>Instructor:</b> [mailto:page@ou.edu Rex Page]<br />
University of Oklahoma<br><br />
<b>Course:</b> Discrete Mathematics<br><br />
<b>Student background:</b> High-school mathematics, introductory programming<br />
course (any language)<br><br />
<b>Materials:</b> Lecture notes, Projects, Exams, Solutions, Proof checking<br />
tools, etc.; text: Hall and O'Donnell, &quot;Discrete Mathematics with a<br />
Computer&quot;<br><br />
<br />
<b>Web page:</b> http://www.cs.ou.edu/~beseme/<br><br />
<b>Comments:</b><br />
<blockquote><br />
Lecture notes comprise over 350 animated slides (all both PowerPoint and<br />
PDF<br />
formats). About two-thirds of the material centers around mathematical logic.<br />
After the introduction of predicates, all of the examples in the logic<br />
portion<br />
of the course involve reasoning about properties of software, most of which is<br />
expressed in Haskell (a few are conventional looping functions).<br />
<p>Software examples include sum, sequence concatenation, logical operations on<br />
sequences, the Russian peasant algorithm, insertion and lookup in AVL <br />
trees, and<br />
other computations. Most of the properties verified relate to aspects of <br />
program<br />
correctness, but resource utilization properties are also verified in <br />
some<br />
cases. Several semesters worth of exams (finals and exams given during <br />
the term)<br />
are provided. The slides have matured through several offerings of the course.</p><br />
<p>The remaining third of the course discusses other standard topics<br />
in discrete<br />
mathematics, such as sets, functions, relations, trees, and counting.<br />
The web<br />
page provides access to a preview of the material. Exams and solutions are<br />
protected by a login procedure (to increase the comfort level of<br />
instructors<br />
wishing to use them in courses). The web page provides a link through<br />
which<br />
instructors may gain access to the full website.</p><br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:labra@lsi.uniovi.es Jose Emilio Labra Gayo],<br />
Dept. of Computer Science (EUITIO) University of Oviedo<br><br />
<b>Course:</b> Logic and Functional Programming<br><br />
<b>Student background:</b> The course is oriented towards third year undergraduate students in computer science. Usually, the students have been<br />
introduced to imperative languages like Pascal and Object <br />
Oriented Languages like C++<br><br />
<b>Materials:</b> Hugs; R. Bird "Introd. to FP using Haskell" (2nd Ed), J. E. Labra Gayo. "Introduction to the Haskell Language" (in spanish).<br><br />
<b>Web page:</b> http://lsi.uniovi.es/~labra/plf.html (in spanish).<br />
My FP page: http://lsi.uniovi.es/~labra/FuncProg.html<br><br />
<br />
<br />
<b>Instructor:</b> [mailto:fruehr@willamette.edu Fritz Ruehr]<br />
Willamette University, Salem, Oregon, USA (a small Liberal Arts College, about 1 hour from Portland & OGI)<br><br />
<b>Course:</b> CS 451 Topics in Computer Science: Functional Programming<br><br />
<b>Student background:</b> Data structures (I may also have required discrete math)<br><br />
<b>Materials:</b> Hugs 1.4 beta (I also taught Scheme); Haskell: The Craft of Functional Programming by Simon Thompson (I also used my own on-line lecture notes and labs and Kent Dybvig's text on Scheme)<br><br />
<b>Web page:</b> http://www.willamette.edu/~fruehr/451/<br><br />
<b>Comments:</b><br />
<blockquote><br />
The notes and labs I have on-line are in pretty rough form: many slide <br />
points are just one-line topical stubs I used as reminders in lecture.<br />
Many of the on-line materials are not linked into the (out of date)<br />
home page.<br />
<br />
I hope to have the course approved for next Fall as a regular offering<br />
(i.e., not as a "special topic") and should have more extensive<br />
on-line materials up by then.<br />
<br />
Teaching "bi-lingually" in Haskell and Scheme seemed like a good idea<br />
at the time, but next time around I will use Haskell as the main vehicle,<br />
perhaps taking some time near the end of the course to highlight some<br />
other languages (Scheme, ML, Clean).<br />
<br />
Some of my students used Conal Elliot's Fran and Paul Hudak's Haskore<br />
and liked them a lot; I was nice to have some significantly-sized<br />
applications that seemed more practical and fun to show off at the end<br />
of the course (I should have demonstrated these things at the beginning<br />
of the course to help with motivation). Next time around I would like to<br />
have a "beginner's prelude" or similar available to avoid problems with<br />
classes in type inference, Int vs. Integer, etc. These problems were a<br />
constant annoyance during lectures.<br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:J.Hamer@cs.auckland.ac.nz John Hamer],<br />
University of Auckland<br><br />
<b>Course:</b> Logic and Functional Programming<br><br />
<b>Student background:</b> Year 2 programming + some discrete maths<br><br />
<b>Materials:</b> Hugs 98, Haskell School of Expression, Page "Two Dozen Short Lessons in Haskell",<br><br />
<b>Web page:</b> http://www.cs.auckland.ac.nz/compsci360fc<br><br />
<br />
<br />
<b>Instructor:</b> [mailto:lengauer@fmi.uni-passau.de Chris Lengauer]<br />
University of Passau<br><br />
<b>Course:</b> Functional Programming<br><br />
<b>Student background:</b> two years of CS study<br><br />
<b>Materials:</b> hugs; Richard Bird's new text (PHI)<br><br />
<b>Web page:</b> not reachable from outside Passau<br><br />
<br />
<br />
<b>Instructor:</b> [mailto:cunningham@cs.olemiss.edu Conrad Cunningham]<br />
University of Mississippi<br><br />
<b>Course:</b> Functional Programming<br><br />
<b>Student background:</b> official -- senior or graduate standing; actual -- introductory programming, data structures, and discrete math<br><br />
<b>Materials:</b> Hugs on Unix and MS Windows systems;<br />
Mostly use the instructor's own set of lecture notes. Also Simon Thompson's HASKELL: THE CRAFT OF FUNCTIONAL PROGRAMMING. Previously used the Bird and Wadler textbook<br><br />
<b>Web page:</b> http://www.cs.olemiss.edu/~hcc/csci555/<br><br />
<b>Comments:</b><br />
<blockquote><br />
Although I am not a researcher in FP, I enjoy teaching the FP course.<br />
Most of the students take to the course after a few weeks. Hugs works<br />
reasonably well, but, of course, more pedagogically oriented error messages<br />
and other support tools would be helpful.<br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:leavens@cs.iastate.edu Gary T. Leavens],<br />
Iowa State University<br><br />
<b>Course:</b> Programming Languages 1<br><br />
<b>Student background:</b> undergraduate course in compilers or programming languaages<br><br />
<b>Materials:</b> Hugs 1.4; Thompson's Haskell: The Craft of Programming<br><br />
<b>Web page:</b> http://www.cs.iastate.edu/~leavens/ComS541.html<br><br />
<b>Comments:</b><br />
<blockquote><br />
Be sure to tell your students how to debug programs.<br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:jtod@dcs.gla.ac.uk John O'Donnell]<br />
University of Glasgow<br><br />
<b>Course:</b> Functional Programming<br><br />
<b>Student background:</b> Programming (in Ada), Algorithmic Foundations<br><br />
<b>Materials:</b> Hugs; Simon Thompson's book on Haskell<br><br />
<b>Web page:</b> http://www.dcs.gla.ac.uk/courses/teaching/level2/modules/#FP2<br><br />
<br />
<b>Instructor:</b> [mailto:chitil@informatik.rwth-aachen.de Olaf Chitil],<br />
RWTH Aachen, Germany<br><br />
<b>Course:</b> Functional Programming in Haskell<br><br />
<b>Student background:</b> basic programming skills (not necessarily in a<br />
functional language)<br><br />
<b>Materials:</b> Hugs 1.4; Hugs user manual, slide copies;<br />
additionally the `Gentle Introduction to Haskell', probably Bird's `Introduction<br />
to Functional Programming using Haskell' in the future.<br><br />
<b>Web page:</b> http://www-i2.informatik.rwth-aachen.de/Praktikum/SWP/ (in German)<br><br />
<b>Comments:</b><br />
<blockquote><br />
The course starts with 4 full time days of learning Haskell. During the semester<br />
the students (in groups of 2 students) have to implement a compiler and an<br />
abstract machine for a simple imperative language. They are given parts of the<br />
system and a manual on how to do the remaining parts (they have no prior<br />
knowledge on compiler construction).<br />
The most difficult construct for students to understand is the monad. I<br />
introduce IO without mentioning monads. Later I explain how to build a simple<br />
exception handling system based on the type `Maybe a' / `Error a'. Only<br />
subsequently I give the general definition of monads and present the list monad<br />
and a simple state monad. However, I fear that just to understand the bind<br />
operator `>>=' requires people to be quite comfortable with higher-order<br />
functions.<br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [http://web.comlab.ox.ac.uk/oucl/people/richard.bird.html Richard Bird], Oxford Brookes University<br><br />
<b>Course:</b> Functional Programming<br><br />
<b>Student background:</b> Elementary structured programming<br><br />
<b>Web page:</b> http://web.comlab.ox.ac.uk/oucl/courses/topics00-01/fp/<br><br />
<br />
<br />
<b>Instructor:</b> [mailto:paul.hudak@yale.edu Paul Hudak],<br />
Yale University, Dept of Computer Science<br><br />
<b>Course:</b> Functional Programming<br><br />
<b>Student background:</b> at least one programming course<br><br />
<b>Materials:</b> Hugs; my own textbook, which is under preparation<br><br />
<b>Web page:</b> none<br><br />
<br />
<br />
<b>Instructor:</b> [mailto:abf@cs.ucc.ie Alex Ferguson]<br />
University College Cork<br><br />
<b>Course:</b> Functional and Logic Programming<br><br />
<b>Student background:</b> Final year undergraduate<br />
<br><br />
<b>Materials:</b> Final year undergraduate<br />
Materials: Hugs 98; ghc; Simon Thompson, "Haskell: The Craft of<br />
Functional Programming" (2nd ed.)<br />
<br><br />
<b>Web page:</b> http://yeats.ucc.ie/~abf/CS4001/<br> <br />
<b>Comments:</b><br />
<blockquote><br />
This is the declarative programming option for 4th year<br />
undergrads, who have Java as a first programming language, and some<br />
knowledge of C and C++. The current final year have had some exposure<br />
to Haskell in first year, though this is no longer the case for our<br />
current intake.<br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:lky@nada.kth.se Leif Kusoffsky],<br />
Royal Institute of Technology, Stockholm<br><br />
<b>Course:</b> Functional Programming 2D1370<br><br />
<b>Student background:</b> The course is oriented towards third year<br />
undergraduate students in computer science. The students<br />
have been introduced to imperative languages like<br />
C and Object Oriented Languages like Java<br />
<br><br />
<b>Materials:</b> Hugs; Hudak : The Haskell School of Expression<br />
<br><br />
<br />
<br />
<b>Instructor:</b> Jeremy Bobbio -- INSIA<br><br />
<b>Course:</b> Functional and Logic Programming<br><br />
<b>Student background:</b> One year CS<br />
<br><br />
<b>Materials:</b> <br />
Hugs, GHC, Paul Hudak's Haskell School of Education<br />
<br><br />
<b>Web page:</b> http://etudiants.insia.org/~jbobbio/pafp/ (french)<br> <br />
<br />
<br />
<b>Instructor:</b> [mailto:antkaij@mit.jyu.fi Antti-Juhani Kaijanaho]<br />
University of Jyväskylä<br><br />
<b>Course:</b> Functional Programming 1 & 2<br><br />
<b>Student background:</b> third-year undergraduate and up<br />
<br><br />
<b>Materials:</b><br />
GHC, Gtk2HS<br />
<br><br />
<b>Web page:</b> [http://www.mit.jyu.fi/antkaij/opetus/fo/2005-2006/index.en.html]<br />
<br><br />
<b>Last run:</b> 2005&ndash;2006<br />
<br><br />
<!--<b>Comments:</b><br />
<blockquote><br />
(I'll write this later)<br />
</blockquote>--><br />
<br />
<b>Instructor:</b> [mailto:djd@comp.leeds.ac.uk David Duke]<br />
University of Leeds, School of Computing<br><br />
<b>Course:</b> Functional Programming<br><br />
<b>Student background:</b> Second and third year undergraduate<br />
<br><br />
<b>Materials:</b> ghc; Graham Hutton "Programming in Haskell"<br />
<br><br />
<b>Web page:</b> www.comp.leeds.ac.uk/se23/<br> <br />
<b>Comments:</b><br />
<blockquote><br />
This is an optional course that students currently can take in <br />
second or third year (from 2008/9 it will be third-years only).<br />
Students will have previously used Python and Java.<br />
Although the emphasis is on learning to solve problems within<br />
the functional paradigm, and how to develop solutions within<br />
Haskell, I also like to show students what is "under the<br />
bonnet" and conclude the module with an introduction to<br />
implementation issues, using material derived from<br />
"Implementing Functional Languages" by Simon Peyton Jones and <br />
David Lester. <br />
</blockquote><br />
<br />
<b>Instructor:</b> [mailto:popavdan@yahoo.com Popa V. Dan]<br />
University of Bacau, Romania <br><br />
<b>Course:</b> "Limbaje formale si automate" (Formal languages and automata) <br><br />
<b>Student background:</b> second-year undergraduate <br />
<br><br />
<b>Materials:</b> Hugs 98 (2002 revised version) included in Mandriva (Formely Mandrake) 10.0 Linux Distribution<br />
<br><br />
<b>Web page:</b> Not yet. Try the page of the "ro" community on www.haskell.org<br />
<br> [http://www.haskell.org/haskellwiki/Ro/Haskell Ro/Haskell webpage is here] <br><br />
<b>First run:</b> 2006&ndash;2007<br />
<br><br />
<br />
Haskell is used as an implementation languages in student's laboratories.<br />
The ideea was to provide a language powerfull enough to be able to express <br />
how to build a parser starting from a grammmar. The students are able<br />
to build small (monadic) interpreters for "while-languages" using a <br />
recommanded monad and a recommanded back-end. The labs are focusing on the <br />
grammar of the languages, on the modular (monadic) parsing as a tool for <br />
verifying and processing inputs which are not validable by finite state <br />
automata but by context free grammmars. Adaptability of the language, <br />
especially obtained manipulating and improving syntax is also a target.<br />
<br />
Support (concerning Haskell): "O introducere in Haskell prin exemple" by<br />
Dan Popa, published in january 31,2007 by <br />
[http://www.edusoft.ro Edusoft](in romanian) Contact the author if needed .<br />
<br />
Other recommanded books: "Gentle Introd to Haskell 98" and YAHT <br />
Recomanded papers: All about monadic parsing. <br />
Special message for Graham Hutton, Erik Meijer and P. Wadler and all <br />
other authors with similar interests from the Haskell <br />
community:<br />
<br />
Thank you very much for your papers concerning Monadic parsing and <br />
interpreters ! <br />
<br />
'''Instructors:''' Involved people [http://www.pdep.com.ar/Home/quines-somos [1]] National and Technological University, Buenos Aires, Argentina Universidad Tecnológica Nacional - Facultad Regional Buenos Aires)<br><br />
'''Course:''' Programming Paradigms <br><br />
'''Student background:''' This is a second-year undergraduate course. Students have already been introduced to basic structured programming concepts. <br><br />
'''Materials:''' Pharo Smalltalk; LOOP [http://www.esug.org/wiki/pier/Conferences/2011/InnovationTechnologyAwards [2]] , SWI-Prolog, Hugs, GHC, "Learn You a Haskell For a Great Good" (Spanish Version) <br><br />
<blockquote><br />
Students are being introduced to three main programming paradigms: <br><br />
<br />
• Object Oriented Programming <br><br />
• Logical Programming <br><br />
• Functional Programming <br><br />
</blockquote><br />
<br />
----<br />
<br />
== Comparative programming languages ==<br />
<br />
These courses teach general programming language principles, with<br />
Haskell as an example of a functional language.<br />
<br />
<b>Instructor: </b> Ruediger Marcus Flaig, University of Heidelberg (Germany)<br />
<br><br />
<b>Course:</b> An introduction to programming in bioinformatics <br><br />
<b>Student background:</b> different, but generally low<br><br />
<b>Materials:</b> Hugs-98 and lots of other stuff<br />
<br><br />
<b>Web page:</b> http://www.sanctacaris.net/rc.html<br> <br />
<b>Comments:</b><br />
<blockquote><br />
This course is designed to introduce life science students,<br />
that is to say, going-to-be biologists, physicians, biotechnologists<br />
and maybe others, to solving real-life problems (such as DNA sequence<br />
handling and analysis). Emphasis will be on paradigms (imperative /<br />
OO, functional, declarative). Although -- in order not to frighten<br />
people -- the official announcement mentions only Python, Haskell will<br />
be presented as THE purely functional language, and all solutions may<br />
be presented in either Python, Haskell or Java. I am very curious<br />
about the feedback I'll get, and maybe next term we shall focus more<br />
on Haskell. What I'd really need, though, is some life science related<br />
package for Haskell, such as BIOPYTHON and BIORUBY. <br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:ham@cs.utexas.edu Hamilton Richards],<br />
University of Texas (Austin)<br><br />
<b>Course:</b> Programming Languages (taught in 2005)<br><br />
<b>Student background:</b> <br><br />
<b>Materials:</b> Hugs 1.4; Sethi, Davie.<br><br />
<b>Web page:</b> http://www.cs.utexas.edu/users/ham/UTCS/CS345/<br><br />
<b>Comments:</b><br />
<blockquote><br />
I'm using Haskell in a programming-languages course, but it's distributed<br />
somewhat piecemeal through the course. Probably adds up to something like<br />
3-4 weeks (out of 15).<br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [http://www.cs.waikato.ac.nz/~marku Mark Utting]<br />
University of Waikato (New Zealand)<br />
<b>Course:</b> Programming Languages<br><br />
<b>Student background:</b> Two years of C++ and 1 year of Haskell<br><br />
<b>Materials:</b> Textbook "Programming Languages", Louden.<br />
<b>Web page:</b> http://www.cs.waikato.ac.nz/~marku/313<br><br />
<b>Comments:</b><br />
<blockquote><br />
The course covers at least two languages in each of the<br />
main paradigms (object-oriented, functional and logic programming),<br />
plus history, semantics and implementation issues.<br />
The Haskell section is about 2 weeks long and usually focusses on <br />
programming with higher-order functions and how that enables the<br />
language to be extended in application-specific ways<br />
(parser combinators, html-generation combinators etc.)<br />
</blockquote><br />
<br />
<b>Instructor:</b> [mailto:zeeshan@apiit.edu.pk M Zeeshan Ali Ansari],<br />
Asia Pacific Institute of Information Technology (Pakistan)<br><br />
<b>Course:</b> Advanced Programming Language Concepts<br><br />
<b>Student background:</b> Students having studied and worked on Imperative Programming Languages <br><br />
<b>Materials:</b> The Craft of Haskell, A Gentle Introduction to Haskell, Yet Another Haskell Tutorial.<br><br />
<b>Web page:</b> http://www.apiit.edu.pk<br><br />
<b>Comments:</b><br />
<blockquote><br />
This course compares and contrasts various programming language paradigms including Functional Programming. Out of 13 week course 5 to 6 of them are dedicated towards Haskell. The material is basically written in a way that enables imperative language programmers to understand the concepts and power of functional programming <br />
<br />
http://www.haskell.org/sitewiki/images/3/3d/Functional_Programming_Tutorial_By_Zeeshan_Ali_Ansari.doc<br />
<br />
<br />
</blockquote><br />
<br />
<b>Instructor:</b> John C. Mitchell,<br />
Stanford University<br><br />
<b>Course:</b> Programming Languages<br><br />
<b>Student background:</b> Some experience with Lisp/C/object-oriented languages.<br><br />
<b>Materials:</b> Concepts in Programming Languages (new Haskell chapters written with Kathleen Fisher)<br><br />
<b>Web page:</b> http://cs242.stanford.edu<br><br />
<b>Comments:</b><br />
<blockquote><br />
Central concepts in modern programming languages, impact on software development, language design trade-offs, and implementation considerations. Functional, imperative, and object-oriented paradigms. Formal semantic methods and program analysis. Modern type systems, higher order functions and closures, exceptions and continuations. Modularity, object-oriented languages, and concurrency. Runtime support for language features, interoperability, and security issues. <br />
</blockquote><br />
<br />
----<br />
<br />
== Advanced functional programming using Haskell ==<br />
<br />
These courses deal with the advanced issues such as semantics, type<br />
systems, or compilers. Includes a other advanced courses taught using<br />
Haskell. <br />
<br />
<b>Instructor:</b> [mailto:gmh@cs.nott.ac.uk Graham Hutton]<br />
School of Computer Science, University of Nottingham<br><br />
<b>Course:</b> Advanced Functional Programming<br><br />
<b>Student background:</b> At least one year of CS, including a course in Haskell<br><br />
<b>Materials:</b> Hugs; GHC; Graham Hutton, Programming in Haskell; own course material<br><br />
<b>Web page:</b> http://www.cs.nott.ac.uk/~gmh/afp.html<br />
<br />
<b>Instructor:</b> [mailto:rjmh@cs.chalmers.se John Hughes]<br />
Chalmers University, Gothenburg<br><br />
<b>Course:</b> Advanced Functional Programming<br><br />
<b>Student background:</b> General CS maturity; from this year most students have already used Haskell in introductory courses.<br><br />
<b>Materials:</b> Mainly hbc.; Papers (see web page)<br><br />
<b>Web page:</b> http://www.cs.chalmers.se/~rjmh/AFP<br><br />
<b>Comments:</b><br />
<blockquote><br />
The goal is to teach students how to solve substantial problems in a<br />
functional language --- `functional programming in anger', one might say. The<br />
emphasis is on design and use of suitable combinator libraries to simplify<br />
applications. Material covered includes monad design, use of CPS style,<br />
libraries for parsing, pretty-printing, and GUIs (presently fudgets). <br />
<br />
The course is taught in a `problem based' manner: lectures are few, while<br />
students solve three substantial programming problems during the term, with<br />
plenty of backup via group meetings. I adopted this teaching form three years<br />
ago, and it has led students to develop far better practical skills than most<br />
obtained from my earlier `lectures and exercises' courses, and I believe to<br />
use Haskell much more after the course's end.<br />
<br />
This course is optional in the third or fourth year, and is taken by a<br />
small-to-medium sized group of students.<br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:Olof.Johanssson@cs.umu.se Olof Johansson], Umeå Univesity, Department of Computing Science<br><br />
<b>Course:</b> Programming language semantics<br><br />
<b>Student background:</b> two terms of computer science studies and specificaly a course Programming language concepts<br><br />
<b>Materials:</b> Hugs and some HBC and GHC; Watt, Programming language, Syntax and Semantics<br><br />
<b>Web page:</b> http://www.cs.umu.se/local/kurser/TDBC05 (Only in swedish)<br> <br />
<br />
<br />
<b>Instructor:</b> [mailto:lyndon@cs.uwa.edu.au Lyndon While]<br />
The University of Western Australia<br><br />
<b>Course:</b> Functional Programming<br><br />
<b>Student background:</b> OOP, plus most of them have used Haskell previously<br><br />
<b>Materials:</b> hugs 98; none of the recent books really fit<br><br />
<b>Web page:</b> http://undergraduate.cs.uwa.edu.au/courses/230.301<br><br />
<b>Instructor:</b> [mailto:F.A.Rabhi@dcs.hull.ac.uk Fethi Rabhi],<br />
University of Hull (UK)<br><br />
<b>Course:</b> AI Problem Solving Techniques (using Haskell and Prolog)<br><br />
<b>Student background:</b> Haskell and Prolog programming<br><br />
<b>Materials:</b> HUGS; Thompson'96, own notes (soon to be published as a book).<br><br />
<b>Web page:</b> none<br><br />
<b>Comments:</b><br />
<blockquote><br />
It is very hard to justify learning Haskell unless it can be<br />
demonstrated in very practical situations (hence the provision<br />
of the above course).<br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:karczma@info.unicaen.fr Jerzy Karczmarczuk]<br />
University of Caen, Caen (France)<br> No links in the fr-Haskell page. Why not ?<br />
<b>Course:</b> Compilation<br><br />
<b>Student background:</b> General CS knowledge; students (should...) know Scheme and imperative languages, also some theory of languages and automata.<br><br />
<b>Materials:</b> <br />
Hugs, GHC, now also GHCi, and their documentation. Handouts: (still a little incomplete)<br />
Impossible to find the foolowing matterials.Files can not be found. <br />
* http://users.info.unicaen.fr/~karczma/matrs/Maitcomp/compilation_a.pdf<br />
* http://users.info.unicaen.fr/~karczma/matrs/Maitcomp/compilation_b.pdf<br />
* http://users.info.unicaen.fr/~karczma/matrs/Maitcomp/compilation_c.pdf<br />
<b>Comments:</b><br />
<blockquote><br />
This is a compulsory semestrial course in fourth year. Weekly: 1.5h<br />
course, 2.5H practice.<br />
One, but comprehensive assignment, taking 2 months or more.<br />
askell is our main coding tool. A little time is devoted by necessity<br />
to the language<br />
itself, but also from the perspective: "how would you compile such a<br />
language".<br />
"Standard stuff", such as parsing combinators, etc.is covered, but we<br />
don't begin with that.<br />
We start with the construction of small interpreters: from recursive<br />
Lisp-style to postfix,<br />
(Forth/PostScript style) constructing this last by partial evaluation<br />
(intuitively).<br />
We introduce control structures as lazy functions, operation<br />
sequencing through continuations,<br />
monads not only for parsing, but also for exceptions and<br />
non-determinism.<br />
We discuss (simply) the type inference. The code generator assembles a<br />
linear code by lazy<br />
concatenation of chunks which makes it trivial to deal with loops and<br />
cross-referencing<br />
fragments. Algorithms of garbage collection are presented (not<br />
implemented, though...) in<br />
a purely functional style.<br />
<br />
Students' opinion: "Frightening at first. Learning curve steep, but<br />
much less time spent on debugging, coding proficiency comes fast. Good for<br />
understanding what the compilation is about, but difficult to make a<br />
complete running program with all the I/O, etc.<br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:jeffm@cse.uconn.edu Jeffrey A. Meunier], University of Connecticut<br><br />
<b>Course:</b> CSE240 Intermediate Computer Systems<br><br />
<b>Student background:</b> computer/microprocessor organization<br />
<br><br />
<b>Materials:</b> Hugs (Feb 2001); Bird ``Introduction to Functional<br />
Programming''; Furber ``ARM System-on-Chip Architecture''<br />
<br><br />
<b>Web page:</b> http://www.engr.uconn.edu/~jeffm/Classes/CSE240-Spring-2001/index.html<br> <br />
<b>Comments:</b><br />
<blockquote><br />
This is a course in the low level programming of microprocessor systems.<br />
The course will focus on the development of an emulator (virtual<br />
machine, or VM) for a small computer system based on a modern RISC<br />
microprocessor (the ARM CPU) using a high level programming language<br />
(Haskell), and assembly language programming of the VM. Development of<br />
the VM will occur in stages, starting with the simple direct-execution<br />
(stream-based) model, gradually moving to a more realistic memory-mapped<br />
model, including exception handlers, concurrent processes, and<br />
asynchronous external devices.<br />
</blockquote><br />
<br />
<b>Instructor:</b> Gabriele Keller<br />
The University of New South Wales<br><br />
<b>Course:</b> Concepts of Programming Languages<br><br />
<b>Student background:</b> Most of them have used Haskell in first year<br><br />
<b>Materials:</b> GHC, TaPL and `Programming Languages: Theory and Practice', papers<br><br />
<b>Web page:</b> http://www.cse.unsw.edu.au/~cs3161<br><br />
<b>Last run:</b> 2006<br><br />
<b>Comments:</b><br />
<blockquote><br />
Expose students to a theory of programming languages based on type<br />
theory and operational semantics as a mathematically sound framework<br />
which allows us to investigate the properties of a large number of<br />
programming language features, including:<br />
<br />
* on semantics of different programming languages and programming paradigms: imperative, object oriented, and declarative.<br />
* theoretical foundations of programming languages: syntax, operatational, axiomatic and denotational semantics.<br />
* implementation aspects of central language features, such as dynamic and strong typing, polymorphism, overloading and automatic memory management<br />
<br />
Assignments are in GHC/Haskell, and in the past have included implementing a<br />
mini-Haskell type checker, type inference and interpreter.<br />
</blockquote><br />
<br />
<b>Instructor:</b> Manuel Chakravarty<br />
The University of New South Wales<br><br />
<b>Course:</b> Advanced Functional Programming<br><br />
<b>Student background:</b> Most of them have used Haskell in first year<br><br />
<b>Materials:</b> GHC, papers (see the website)<br><br />
<b>Web page:</b> http://www.cse.unsw.edu.au/~cs4132<br><br />
<b>Last run:</b>2004<br><br />
<b>Comments:</b><br />
<blockquote><br />
To provide students with an understanding of the theory and practice of<br />
the design, use, and implementation of functional programming languages,<br />
such as Haskell<br />
<br />
This includes selected topics from the following areas:<br />
<br />
* Foundations: lambda calculus, semantics, and type systems.<br />
* Design: side-effects, exceptions, concurrency, and parallelism.<br />
* Implementation: abstract machines, program transformation, and memory management. <br />
* Programming techniques: combinator libraries, monads, generic programming, and meta programming.<br />
* Applications: domain specific languages, graphics, web programming, reactive systems, and scientific programming.<br />
</blockquote><br />
<br />
[[Category:Community]]</div>Aivanhttps://wiki.haskell.org/index.php?title=Haskell_in_education&diff=55921Haskell in education2013-05-13T15:20:18Z<p>Aivan: /* Haskell as a second language */</p>
<hr />
<div>[[Category:Education]]<br />
This is a collection of material of interest to those teaching or<br />
taking courses that use Haskell. There is also a more general site,<br />
http://www.cs.kun.nl/fple/, devoted to all functional languages. The proceedings of the latest<br />
[http://www.informatik.uni-kiel.de/~mh/publications/reports/fdpe02/ International Workshop on Functional and Declarative Programming in Education (FDPE)] are now available.<br />
Some of the lecture notes and<br />
other course material found in these web pages are excellent<br />
supplements to the available text books.<br />
If you would like to use lecture<br />
notes, assignments, or other material found in these course web pages<br />
please contact the author for permission.<br />
<br />
Most of the entries are years old. When you add your own new<br />
material to this page, please also say when the course was run for the last time.<br />
<br />
The results of a survey of university courses using Haskell in the academic year 2005-2006 can be found [http://www.cs.chalmers.se/~rjmh/Wash/Survey/teaching.htm here]. Also, some news were added during the 2006-2007 academic year.<br />
<br />
== Suitable Course Textbooks ==<br />
<br />
See [[Books#Textbooks]].<br />
<br />
== Haskell as a first language ==<br />
<br />
These courses teach Haskell to students with no background in programming.<br />
<br />
<b>Instructor:</b> [http://homepages.inf.ed.ac.uk/wadler/ Philip Wadler] University of Edinburgh<br><br />
<b>Course:</b> [[Informatics 1 - Functional Programming]]<br><br />
<b>Materials:</b> GHCi, Emacs, Thompson: Haskell, the Craft of Functional Programming<br><br />
<b>Web page:</b> http://www.inf.ed.ac.uk/teaching/courses/inf1/fp/ <br><br />
<br />
<br />
<b>Instructor:</b> [mailto:page@ou.edu Rex Page] <br />
University of<br />
Oklahoma<br><br />
<b>Course:</b> Introduction to Computer Programming<br><br />
<b>Student background:</b> High-school mathematics<br><br />
<b>Materials:</b> Projects, Exams, Downloadable textbook: Rex Page, <br />
&quot;Two<br />
Dozen Short Lessons in Haskell&quot;<br><br />
<b>Web page:</b> http://www.cs.ou.edu/~rlpage/fpclassSpring97/<br />
<br />
<b>Comments:</b><br />
<blockquote><br />
These materials arose from a course offered for three consecutive<br />
semesters as<br />
an alternative to our usual first course in programming. Most of the<br />
students<br />
who took the course graduated in the past two years, and many of them<br />
cited it<br />
in the exit interview with the department chair as the most influential<br />
course<br />
in the entire academic career.<br />
<p>All materials for two offerings of the course are available through<br />
the web<br />
page. This includes individual projects, team projects, project<br />
solutions,<br />
exams, supplied software (connected with certain projects), tips for<br />
students<br />
taking the course, FAQs addressing questions that students asked during<br />
the<br />
semester, and a short textbook which served as the primary text in the<br />
course.</p><br />
<p>The first 10 to 11 weeks of the course use Haskell. Students are<br />
required to<br />
write nine programs in Haskell, three of which are team projects that<br />
combine<br />
software developed in individual projects. Different members of a team<br />
are<br />
assigned different individual projects, and the team efforts combine<br />
their<br />
solutions into a working piece of software.</p><br />
<p>In the early part of the course, students use operators like map,<br />
foldr, zip,<br />
and iterate to express computations. Explicit recursion is introduced<br />
after some<br />
experience with these common patterns of computation. Examples and<br />
problems<br />
address non-numeric applications, for the most part. Both interactive<br />
and file<br />
I/O are covered, but general purpose monads are not.</p><br />
<p>The last 5 to 6 weeks of the course use C, and most of the projects<br />
in that<br />
part of the course duplicate the function of earlier pieces of software<br />
that the<br />
students have written in Haskell.</p><br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:Jonathan.Hill@comlab.ox.ac.uk Jonathan Hill]<br />
Oxford University Computing Laboratory<br><br />
<b>Course:</b> Functional Programming for the Integrated Graduate Development Programme in Software Engineering at Oxford University.<br><br />
<b>Student background:</b> Discrete mathematics (the course is a part time MSc for people from industry; most are from IBM or Nortel).<br><br />
<b>Materials:</b> Gofer (an old version, with a stripped down prelude---no parameter classes!); Own course material<br><br />
<b>Web page:</b> http://www.comlab.ox.ac.uk/igdp/text/course06.html<br />
Note: Web pages not accessible. May be ... moved ? <br />
<br />
<br />
<b>Instructor:</b> [mailto:nxg@cs.nott.ac.uk Neil Ghani]<br />
School of Computer Science, University of Nottingham<br><br />
<b>Course:</b> Functional Programming<br><br />
<b>Student background:</b> None<br><br />
<b>Materials:</b> Hugs; Graham Hutton, Programming in Haskell; own lecture slides<br><br />
<b>Web page:</b> http://www.cs.nott.ac.uk/~nxg/G51FUN06/fun.html<br />
<br />
<b>Instructor:</b> [mailto:prins@cs.unc.edu" Jan Prins]<br />
UNC Chapel Hill<br><br />
<b>Course:</b> Introduction to Functional Programming<br><br />
<b>Student background:</b> solid background in high-school science and mathematics<br><br />
<b>Materials:</b> Hugs 1.4 incl. Active Haskell, FRAN and [[Haskore]]; Simon Thompson, "Haskell: The Art of Functional Programming"<br><br />
<b>Web page:</b> http://www.cs.unc.edu/~prins/Classes/15/<br><br />
<b>Comments:</b><br />
<blockquote><br />
(Introductory programming course for CS and math/science majors, typically Freshman and Sophomores. Class size ~60)<br />
<br />
Our undergraduate computing environment is now largely<br />
PCs running Windows NT. We use NTEmacs as the programming<br />
environment with a slightly modified version of Emacs hugs<br />
mode with hugs running as a subprocess. The combined<br />
hugs/NTEmacs/Active Haskell distribution (available through<br />
course home page) is installed on 400+ public Win NT machines<br />
on campus and some unknown number of student-owned Win 95/98<br />
machines.<br />
<br />
This arrangement is new this semester, but so far has been<br />
working well. Keystroke-oriented interactive applications<br />
may be problematic with hugs running in NTEmacs shell mode.<br />
<br />
I'm planning assignments using Fran and Active Haskell and<br />
will try teaching the "brief introduction to imperative<br />
programming" at the end of the class using monads. I would<br />
be interested in talking with anyone who has experience or<br />
suggestions along these lines.<br />
<br />
I took a cue from Paul Hudak and others and have occasional<br />
appearances of MS Agents during lectures to wake students up!<br />
<br />
This is my first time teaching this course, and I would<br />
enjoy talking to others teaching at a similar level. A<br />
cursory search on the web didn't reveal many courses<br />
in this category.<br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:dave@cs.chalmers.se David Sands]<br />
University of Gothenburg & Chalmers University of Technology<br><br />
<b>Course:</b> Programmering för Naturvetare<br><br />
<b>Student background:</b> New students<br><br />
<b>Materials:</b> hugs 1.4; Simon Thompson<br><br />
<b>Web page:</b> http://www.md.chalmers.se/Cs/Grundutb/Kurser/nptah/<br><br />
<b>Comments:</b><br />
<blockquote><br />
This is the first part of a first course in programming. About 16<br />
lectures, each 2x45 mins plus weekly exercise classes and three<br />
assessed programming exercises. Most of my materials are in English.<br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:M.A.Rodrigues@dcs.hull.ac.uk Marcos A Rodrigues]<br />
The University of Hull, Hull, UK<br><br />
<b>Course:</b> Functional and Logic Programming<br><br />
<b>Student background:</b> none<br><br />
<b>Materials:</b> hugs 1.4; Haskell: the Craft of Functional Programming. Thompson S., Addison Wesley, 1996.<br><br />
<br />
<b>Instructor:</b> [mailto:Torsten.Grust@uni-konstanz.de Torsten Grust]<br />
University of Konstanz (Germany)<br> <br />
<b>Course:</b> Deklarative Programmierung (Declarative Programming, in german)<br><br />
<b>Student background:</b> basic math, no programming background required<br><br />
<b>Materials:</b> Hugs 1.4; (~300) slides available from the course web page;<br />
Jeroen Fokker's classroom text: Functional Programming<br />
http://www.cs.uu.nl/~jeroen/courses/fp-eng.ps.gz</a>;<br />
Richard Bird, Phil Wadler: Introduction to Functional Programming; Simon Peyton-Jones: Implementation of Functional Programming Languages<br><br />
<b>Web page:</b> http://www.fmi.uni-konstanz.de/dbis/Courses-old/Courses-ss98/decl-ss98.html<br><br />
<b>Comments:</b><br />
<blockquote><br />
The course is in German only (sorry about that). It additionally<br />
features an introduction to logical programming and Prolog.<br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:richardb@cse.unsw.edu.au Richard Buckland]<br />
University of New South Wales<br><br />
<b>Course:</b> Computing 1A<br><br />
<b>Student background:</b> Mixed, some have no computing<br />
background. This is our cs1 subject.<br><br />
<b>Materials:</b> Hugs 1.4; Simon Thompson<br><br />
<b>Web page:</b> http://www.cse.unsw.edu.au/~cs1011<br><br />
<br />
<br />
<b>Instructor:</b> [mailto:robert@techfak.uni-bielefeld Robert Giegerich], Stefan Posch, University Bielefeld, Germany<br><br />
<b>Course:</b> Introduction to Computer Science<br><br />
<b>Student background:</b> Completed High School (Abitur)<br><br />
<b>Materials:</b> Hugs; Class Notes by Robert Giegerich and Ralf Hinze<br><br />
<b>Comments:</b><br />
<blockquote><br />
Our first semester course<br />
uses Haskell as a vehicle to fundamental aspects of computation:<br />
algorithmics, specification and verification, efficiency analysis,<br />
programming methods. This works wonderfully. We do not require previous<br />
or additional programming experience. Haskell is quickly learned, <br />
to the necessary degreee; we make no attempt to cover the full language.<br />
This is NOT a Haskell course! Haskell allows us to speak about concepts<br />
of computer science WITHOUT a lot of language learning. And Haskell<br />
even helps to keep out detrimental habits from previous programming<br />
experience, as well as motivational problems resulting from the widely<br />
differing previous experiences of our incoming students.<br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:hj@sm.luth.se Håkan Jonsson] Luleå University of Technology, Sweden<br><br />
<b>Course:</b> SMD001, functional programming<br><br />
<b>Student background:</b> <br />
None. This is the very first programming course <br />
our students take.<br><br />
<b>Materials:</b> <br />
Materials: Simon Thompson's Haskell book + 7 laboratory/programming <br />
assignments using Hugs.<br />
<br><br />
<b>Web page:</b>http://www.sm.luth.se/csee/courses/smd/001/ (mostly Swedish)<br> <br />
<br />
<br />
<b>Instructor:</b> [mailto:Clem.Baker-Finch@cs.anu.edu.au Clem Baker-Finch, Australian National University<br><br />
<b>Course:</b>Introduction to Programming and Algorithms<br><br />
<b>Student background:</b> No programming background was<br />
assumed.<br />
<br><br />
<b>Materials:</b> GHC, GHCi, Simon Thompson 1st ed., my own materials. <br />
<br><br />
<b>Web page:</b> http://cs.anu.edu.au/Student/comp1100/<br> <br />
<b>Comments:</b><br />
<blockquote><br />
The first 75% of the course is basic programming concepts using Haskell. The remainder covers the same concepts in Java. This is reinforced - hopefully - by the third assignment (in Java) being the same as the first assignment (in Haskell). The aim is to provide a managed transition to the course which follows in second semester. Another point of possible interest is the use of a simple graphics library, ANUPlot, built on top of the OpenGL binding. See http://code.google.com/p/anuplot/<br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:lyndon@cs.uwa.edu.au Lyndon While] The University of Western Australia<br><br />
<b>Course:</b> Foundations of Computer Science<br><br />
<b>Student background:</b> None<br><br />
<b>Materials:</b> hugs 98; Thompson.<br><br />
<b>Web page:</b> http://undergraduate.cs.uwa.edu.au/courses/230.123<br><br />
<br />
<br />
<b>Instructor:</b> [http://www.cs.us.es/~jalonso José A. Alonso Jiménez] Dept of Computer Science and A.I., University of Seville, Spain<br><br />
<b>Course:</b> Informatics (Inform&aacute;tica, in spanish)<br><br />
<b>Student background:</b> None. This is the very first programming course <br />
our students take.<br><br />
<b>Materials:</b> GHCi, Emacs, Graham Hutton: &quot;Programming in Haskell&quot;, Slides, Exercises, Exams <br><br />
<b>Web page:</b> http://www.cs.us.es/~jalonso/cursos/i1m (in spanish)<br><br />
<b>First run:</b> 2009–2010<br><br />
<b>Last run:</b> 2012–2013<br />
<br />
----<br />
<br />
== Haskell as a second language ==<br />
<br />
These courses teach Haskell to students that have already learned<br />
another language.<br />
<br />
<b>Instructor:</b> [mailto:page@ou.edu Rex Page]<br />
University of Oklahoma<br><br />
<b>Course:</b> Discrete Mathematics<br><br />
<b>Student background:</b> High-school mathematics, introductory programming<br />
course (any language)<br><br />
<b>Materials:</b> Lecture notes, Projects, Exams, Solutions, Proof checking<br />
tools, etc.; text: Hall and O'Donnell, &quot;Discrete Mathematics with a<br />
Computer&quot;<br><br />
<br />
<b>Web page:</b> http://www.cs.ou.edu/~beseme/<br><br />
<b>Comments:</b><br />
<blockquote><br />
Lecture notes comprise over 350 animated slides (all both PowerPoint and<br />
PDF<br />
formats). About two-thirds of the material centers around mathematical logic.<br />
After the introduction of predicates, all of the examples in the logic<br />
portion<br />
of the course involve reasoning about properties of software, most of which is<br />
expressed in Haskell (a few are conventional looping functions).<br />
<p>Software examples include sum, sequence concatenation, logical operations on<br />
sequences, the Russian peasant algorithm, insertion and lookup in AVL <br />
trees, and<br />
other computations. Most of the properties verified relate to aspects of <br />
program<br />
correctness, but resource utilization properties are also verified in <br />
some<br />
cases. Several semesters worth of exams (finals and exams given during <br />
the term)<br />
are provided. The slides have matured through several offerings of the course.</p><br />
<p>The remaining third of the course discusses other standard topics<br />
in discrete<br />
mathematics, such as sets, functions, relations, trees, and counting.<br />
The web<br />
page provides access to a preview of the material. Exams and solutions are<br />
protected by a login procedure (to increase the comfort level of<br />
instructors<br />
wishing to use them in courses). The web page provides a link through<br />
which<br />
instructors may gain access to the full website.</p><br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:labra@lsi.uniovi.es Jose Emilio Labra Gayo],<br />
Dept. of Computer Science (EUITIO) University of Oviedo<br><br />
<b>Course:</b> Logic and Functional Programming<br><br />
<b>Student background:</b> The course is oriented towards third year undergraduate students in computer science. Usually, the students have been<br />
introduced to imperative languages like Pascal and Object <br />
Oriented Languages like C++<br><br />
<b>Materials:</b> Hugs; R. Bird "Introd. to FP using Haskell" (2nd Ed), J. E. Labra Gayo. "Introduction to the Haskell Language" (in spanish).<br><br />
<b>Web page:</b> http://lsi.uniovi.es/~labra/plf.html (in spanish).<br />
My FP page: http://lsi.uniovi.es/~labra/FuncProg.html<br><br />
<br />
<br />
<b>Instructor:</b> [mailto:fruehr@willamette.edu Fritz Ruehr]<br />
Willamette University, Salem, Oregon, USA (a small Liberal Arts College, about 1 hour from Portland & OGI)<br><br />
<b>Course:</b> CS 451 Topics in Computer Science: Functional Programming<br><br />
<b>Student background:</b> Data structures (I may also have required discrete math)<br><br />
<b>Materials:</b> Hugs 1.4 beta (I also taught Scheme); Haskell: The Craft of Functional Programming by Simon Thompson (I also used my own on-line lecture notes and labs and Kent Dybvig's text on Scheme)<br><br />
<b>Web page:</b> http://www.willamette.edu/~fruehr/451/<br><br />
<b>Comments:</b><br />
<blockquote><br />
The notes and labs I have on-line are in pretty rough form: many slide <br />
points are just one-line topical stubs I used as reminders in lecture.<br />
Many of the on-line materials are not linked into the (out of date)<br />
home page.<br />
<br />
I hope to have the course approved for next Fall as a regular offering<br />
(i.e., not as a "special topic") and should have more extensive<br />
on-line materials up by then.<br />
<br />
Teaching "bi-lingually" in Haskell and Scheme seemed like a good idea<br />
at the time, but next time around I will use Haskell as the main vehicle,<br />
perhaps taking some time near the end of the course to highlight some<br />
other languages (Scheme, ML, Clean).<br />
<br />
Some of my students used Conal Elliot's Fran and Paul Hudak's Haskore<br />
and liked them a lot; I was nice to have some significantly-sized<br />
applications that seemed more practical and fun to show off at the end<br />
of the course (I should have demonstrated these things at the beginning<br />
of the course to help with motivation). Next time around I would like to<br />
have a "beginner's prelude" or similar available to avoid problems with<br />
classes in type inference, Int vs. Integer, etc. These problems were a<br />
constant annoyance during lectures.<br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:J.Hamer@cs.auckland.ac.nz John Hamer],<br />
University of Auckland<br><br />
<b>Course:</b> Logic and Functional Programming<br><br />
<b>Student background:</b> Year 2 programming + some discrete maths<br><br />
<b>Materials:</b> Hugs 98, Haskell School of Expression, Page "Two Dozen Short Lessons in Haskell",<br><br />
<b>Web page:</b> http://www.cs.auckland.ac.nz/compsci360fc<br><br />
<br />
<br />
<b>Instructor:</b> [mailto:lengauer@fmi.uni-passau.de Chris Lengauer]<br />
University of Passau<br><br />
<b>Course:</b> Functional Programming<br><br />
<b>Student background:</b> two years of CS study<br><br />
<b>Materials:</b> hugs; Richard Bird's new text (PHI)<br><br />
<b>Web page:</b> not reachable from outside Passau<br><br />
<br />
<br />
<b>Instructor:</b> [mailto:cunningham@cs.olemiss.edu Conrad Cunningham]<br />
University of Mississippi<br><br />
<b>Course:</b> Functional Programming<br><br />
<b>Student background:</b> official -- senior or graduate standing; actual -- introductory programming, data structures, and discrete math<br><br />
<b>Materials:</b> Hugs on Unix and MS Windows systems;<br />
Mostly use the instructor's own set of lecture notes. Also Simon Thompson's HASKELL: THE CRAFT OF FUNCTIONAL PROGRAMMING. Previously used the Bird and Wadler textbook<br><br />
<b>Web page:</b> http://www.cs.olemiss.edu/~hcc/csci555/<br><br />
<b>Comments:</b><br />
<blockquote><br />
Although I am not a researcher in FP, I enjoy teaching the FP course.<br />
Most of the students take to the course after a few weeks. Hugs works<br />
reasonably well, but, of course, more pedagogically oriented error messages<br />
and other support tools would be helpful.<br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:leavens@cs.iastate.edu Gary T. Leavens],<br />
Iowa State University<br><br />
<b>Course:</b> Programming Languages 1<br><br />
<b>Student background:</b> undergraduate course in compilers or programming languaages<br><br />
<b>Materials:</b> Hugs 1.4; Thompson's Haskell: The Craft of Programming<br><br />
<b>Web page:</b> http://www.cs.iastate.edu/~leavens/ComS541.html<br><br />
<b>Comments:</b><br />
<blockquote><br />
Be sure to tell your students how to debug programs.<br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:jtod@dcs.gla.ac.uk John O'Donnell]<br />
University of Glasgow<br><br />
<b>Course:</b> Functional Programming<br><br />
<b>Student background:</b> Programming (in Ada), Algorithmic Foundations<br><br />
<b>Materials:</b> Hugs; Simon Thompson's book on Haskell<br><br />
<b>Web page:</b> http://www.dcs.gla.ac.uk/courses/teaching/level2/modules/#FP2<br><br />
<br />
<b>Instructor:</b> [mailto:chitil@informatik.rwth-aachen.de Olaf Chitil],<br />
RWTH Aachen, Germany<br><br />
<b>Course:</b> Functional Programming in Haskell<br><br />
<b>Student background:</b> basic programming skills (not necessarily in a<br />
functional language)<br><br />
<b>Materials:</b> Hugs 1.4; Hugs user manual, slide copies;<br />
additionally the `Gentle Introduction to Haskell', probably Bird's `Introduction<br />
to Functional Programming using Haskell' in the future.<br><br />
<b>Web page:</b> http://www-i2.informatik.rwth-aachen.de/Praktikum/SWP/ (in German)<br><br />
<b>Comments:</b><br />
<blockquote><br />
The course starts with 4 full time days of learning Haskell. During the semester<br />
the students (in groups of 2 students) have to implement a compiler and an<br />
abstract machine for a simple imperative language. They are given parts of the<br />
system and a manual on how to do the remaining parts (they have no prior<br />
knowledge on compiler construction).<br />
The most difficult construct for students to understand is the monad. I<br />
introduce IO without mentioning monads. Later I explain how to build a simple<br />
exception handling system based on the type `Maybe a' / `Error a'. Only<br />
subsequently I give the general definition of monads and present the list monad<br />
and a simple state monad. However, I fear that just to understand the bind<br />
operator `>>=' requires people to be quite comfortable with higher-order<br />
functions.<br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [http://web.comlab.ox.ac.uk/oucl/people/richard.bird.html Richard Bird], Oxford Brookes University<br><br />
<b>Course:</b> Functional Programming<br><br />
<b>Student background:</b> Elementary structured programming<br><br />
<b>Web page:</b> http://web.comlab.ox.ac.uk/oucl/courses/topics00-01/fp/<br><br />
<br />
<br />
<b>Instructor:</b> [mailto:paul.hudak@yale.edu Paul Hudak],<br />
Yale University, Dept of Computer Science<br><br />
<b>Course:</b> Functional Programming<br><br />
<b>Student background:</b> at least one programming course<br><br />
<b>Materials:</b> Hugs; my own textbook, which is under preparation<br><br />
<b>Web page:</b> none<br><br />
<br />
<br />
<b>Instructor:</b> [mailto:abf@cs.ucc.ie Alex Ferguson]<br />
University College Cork<br><br />
<b>Course:</b> Functional and Logic Programming<br><br />
<b>Student background:</b> Final year undergraduate<br />
<br><br />
<b>Materials:</b> Final year undergraduate<br />
Materials: Hugs 98; ghc; Simon Thompson, "Haskell: The Craft of<br />
Functional Programming" (2nd ed.)<br />
<br><br />
<b>Web page:</b> http://yeats.ucc.ie/~abf/CS4001/<br> <br />
<b>Comments:</b><br />
<blockquote><br />
This is the declarative programming option for 4th year<br />
undergrads, who have Java as a first programming language, and some<br />
knowledge of C and C++. The current final year have had some exposure<br />
to Haskell in first year, though this is no longer the case for our<br />
current intake.<br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:lky@nada.kth.se Leif Kusoffsky],<br />
Royal Institute of Technology, Stockholm<br><br />
<b>Course:</b> Functional Programming 2D1370<br><br />
<b>Student background:</b> The course is oriented towards third year<br />
undergraduate students in computer science. The students<br />
have been introduced to imperative languages like<br />
C and Object Oriented Languages like Java<br />
<br><br />
<b>Materials:</b> Hugs; Hudak : The Haskell School of Expression<br />
<br><br />
<br />
<br />
<b>Instructor:</b> Jeremy Bobbio -- INSIA<br><br />
<b>Course:</b> Functional and Logic Programming<br><br />
<b>Student background:</b> One year CS<br />
<br><br />
<b>Materials:</b> <br />
Hugs, GHC, Paul Hudak's Haskell School of Education<br />
<br><br />
<b>Web page:</b> http://etudiants.insia.org/~jbobbio/pafp/ (french)<br> <br />
<br />
<br />
<b>Instructor:</b> [mailto:antkaij@mit.jyu.fi Antti-Juhani Kaijanaho]<br />
University of Jyväskylä<br><br />
<b>Course:</b> Functional Programming 1 & 2<br><br />
<b>Student background:</b> third-year undergraduate and up<br />
<br><br />
<b>Materials:</b><br />
GHC, Gtk2HS<br />
<br><br />
<b>Web page:</b> [http://www.mit.jyu.fi/antkaij/opetus/fo/2005-2006/index.en.html]<br />
<br><br />
<b>Last run:</b> 2005&ndash;2006<br />
<br><br />
<!--<b>Comments:</b><br />
<blockquote><br />
(I'll write this later)<br />
</blockquote>--><br />
<br />
<b>Instructor:</b> [mailto:djd@comp.leeds.ac.uk David Duke]<br />
University of Leeds, School of Computing<br><br />
<b>Course:</b> Functional Programming<br><br />
<b>Student background:</b> Second and third year undergraduate<br />
<br><br />
<b>Materials:</b> ghc; Graham Hutton "Programming in Haskell"<br />
<br><br />
<b>Web page:</b> www.comp.leeds.ac.uk/se23/<br> <br />
<b>Comments:</b><br />
<blockquote><br />
This is an optional course that students currently can take in <br />
second or third year (from 2008/9 it will be third-years only).<br />
Students will have previously used Python and Java.<br />
Although the emphasis is on learning to solve problems within<br />
the functional paradigm, and how to develop solutions within<br />
Haskell, I also like to show students what is "under the<br />
bonnet" and conclude the module with an introduction to<br />
implementation issues, using material derived from<br />
"Implementing Functional Languages" by Simon Peyton Jones and <br />
David Lester. <br />
</blockquote><br />
<br />
<b>Instructor:</b> [mailto:popavdan@yahoo.com Popa V. Dan]<br />
University of Bacau, Romania <br><br />
<b>Course:</b> "Limbaje formale si automate" (Formal languages and automata) <br><br />
<b>Student background:</b> second-year undergraduate <br />
<br><br />
<b>Materials:</b> Hugs 98 (2002 revised version) included in Mandriva (Formely Mandrake) 10.0 Linux Distribution<br />
<br><br />
<b>Web page:</b> Not yet. Try the page of the "ro" community on www.haskell.org<br />
<br> [http://www.haskell.org/haskellwiki/Ro/Haskell Ro/Haskell webpage is here] <br><br />
<b>First run:</b> 2006&ndash;2007<br />
<br><br />
<br />
Haskell is used as an implementation languages in student's laboratories.<br />
The ideea was to provide a language powerfull enough to be able to express <br />
how to build a parser starting from a grammmar. The students are able<br />
to build small (monadic) interpreters for "while-languages" using a <br />
recommanded monad and a recommanded back-end. The labs are focusing on the <br />
grammar of the languages, on the modular (monadic) parsing as a tool for <br />
verifying and processing inputs which are not validable by finite state <br />
automata but by context free grammmars. Adaptability of the language, <br />
especially obtained manipulating and improving syntax is also a target.<br />
<br />
Support (concerning Haskell): "O introducere in Haskell prin exemple" by<br />
Dan Popa, published in january 31,2007 by <br />
[http://www.edusoft.ro Edusoft](in romanian) Contact the author if needed .<br />
<br />
Other recommanded books: "Gentle Introd to Haskell 98" and YAHT <br />
Recomanded papers: All about monadic parsing. <br />
Special message for Graham Hutton, Erik Meijer and P. Wadler and all <br />
other authors with similar interests from the Haskell <br />
community:<br />
<br />
Thank you very much for your papers concerning Monadic parsing and <br />
interpreters ! <br />
<br />
'''Instructors:''' Involved people [http://www.pdep.com.ar/Home/quines-somos] National and Technological University, Buenos Aires, Argentina Universidad Tecnológica Nacional - Facultad Regional Buenos Aires)<br><br />
'''Course:''' Programming Paradigms <br><br />
'''Student background:''' This is a second-year undergraduate course. Students have already been introduced to basic structured programming concepts. <br><br />
'''Materials:''' Pharo Smalltalk; LOOP [http://www.esug.org/wiki/pier/Conferences/2011/InnovationTechnologyAwards] , SWI-Prolog, Hugs, GHC, "Learn You a Haskell For a Great Good" (Spanish Version) <br><br />
<blockquote><br />
Students are being introduced to three main programming paradigms: <br><br />
<br />
• Object Oriented Programming <br><br />
• Logical Programming <br><br />
• Functional Programming <br><br />
</blockquote><br />
<br />
----<br />
<br />
== Comparative programming languages ==<br />
<br />
These courses teach general programming language principles, with<br />
Haskell as an example of a functional language.<br />
<br />
<b>Instructor: </b> Ruediger Marcus Flaig, University of Heidelberg (Germany)<br />
<br><br />
<b>Course:</b> An introduction to programming in bioinformatics <br><br />
<b>Student background:</b> different, but generally low<br><br />
<b>Materials:</b> Hugs-98 and lots of other stuff<br />
<br><br />
<b>Web page:</b> http://www.sanctacaris.net/rc.html<br> <br />
<b>Comments:</b><br />
<blockquote><br />
This course is designed to introduce life science students,<br />
that is to say, going-to-be biologists, physicians, biotechnologists<br />
and maybe others, to solving real-life problems (such as DNA sequence<br />
handling and analysis). Emphasis will be on paradigms (imperative /<br />
OO, functional, declarative). Although -- in order not to frighten<br />
people -- the official announcement mentions only Python, Haskell will<br />
be presented as THE purely functional language, and all solutions may<br />
be presented in either Python, Haskell or Java. I am very curious<br />
about the feedback I'll get, and maybe next term we shall focus more<br />
on Haskell. What I'd really need, though, is some life science related<br />
package for Haskell, such as BIOPYTHON and BIORUBY. <br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:ham@cs.utexas.edu Hamilton Richards],<br />
University of Texas (Austin)<br><br />
<b>Course:</b> Programming Languages (taught in 2005)<br><br />
<b>Student background:</b> <br><br />
<b>Materials:</b> Hugs 1.4; Sethi, Davie.<br><br />
<b>Web page:</b> http://www.cs.utexas.edu/users/ham/UTCS/CS345/<br><br />
<b>Comments:</b><br />
<blockquote><br />
I'm using Haskell in a programming-languages course, but it's distributed<br />
somewhat piecemeal through the course. Probably adds up to something like<br />
3-4 weeks (out of 15).<br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [http://www.cs.waikato.ac.nz/~marku Mark Utting]<br />
University of Waikato (New Zealand)<br />
<b>Course:</b> Programming Languages<br><br />
<b>Student background:</b> Two years of C++ and 1 year of Haskell<br><br />
<b>Materials:</b> Textbook "Programming Languages", Louden.<br />
<b>Web page:</b> http://www.cs.waikato.ac.nz/~marku/313<br><br />
<b>Comments:</b><br />
<blockquote><br />
The course covers at least two languages in each of the<br />
main paradigms (object-oriented, functional and logic programming),<br />
plus history, semantics and implementation issues.<br />
The Haskell section is about 2 weeks long and usually focusses on <br />
programming with higher-order functions and how that enables the<br />
language to be extended in application-specific ways<br />
(parser combinators, html-generation combinators etc.)<br />
</blockquote><br />
<br />
<b>Instructor:</b> [mailto:zeeshan@apiit.edu.pk M Zeeshan Ali Ansari],<br />
Asia Pacific Institute of Information Technology (Pakistan)<br><br />
<b>Course:</b> Advanced Programming Language Concepts<br><br />
<b>Student background:</b> Students having studied and worked on Imperative Programming Languages <br><br />
<b>Materials:</b> The Craft of Haskell, A Gentle Introduction to Haskell, Yet Another Haskell Tutorial.<br><br />
<b>Web page:</b> http://www.apiit.edu.pk<br><br />
<b>Comments:</b><br />
<blockquote><br />
This course compares and contrasts various programming language paradigms including Functional Programming. Out of 13 week course 5 to 6 of them are dedicated towards Haskell. The material is basically written in a way that enables imperative language programmers to understand the concepts and power of functional programming <br />
<br />
http://www.haskell.org/sitewiki/images/3/3d/Functional_Programming_Tutorial_By_Zeeshan_Ali_Ansari.doc<br />
<br />
<br />
</blockquote><br />
<br />
<b>Instructor:</b> John C. Mitchell,<br />
Stanford University<br><br />
<b>Course:</b> Programming Languages<br><br />
<b>Student background:</b> Some experience with Lisp/C/object-oriented languages.<br><br />
<b>Materials:</b> Concepts in Programming Languages (new Haskell chapters written with Kathleen Fisher)<br><br />
<b>Web page:</b> http://cs242.stanford.edu<br><br />
<b>Comments:</b><br />
<blockquote><br />
Central concepts in modern programming languages, impact on software development, language design trade-offs, and implementation considerations. Functional, imperative, and object-oriented paradigms. Formal semantic methods and program analysis. Modern type systems, higher order functions and closures, exceptions and continuations. Modularity, object-oriented languages, and concurrency. Runtime support for language features, interoperability, and security issues. <br />
</blockquote><br />
<br />
----<br />
<br />
== Advanced functional programming using Haskell ==<br />
<br />
These courses deal with the advanced issues such as semantics, type<br />
systems, or compilers. Includes a other advanced courses taught using<br />
Haskell. <br />
<br />
<b>Instructor:</b> [mailto:gmh@cs.nott.ac.uk Graham Hutton]<br />
School of Computer Science, University of Nottingham<br><br />
<b>Course:</b> Advanced Functional Programming<br><br />
<b>Student background:</b> At least one year of CS, including a course in Haskell<br><br />
<b>Materials:</b> Hugs; GHC; Graham Hutton, Programming in Haskell; own course material<br><br />
<b>Web page:</b> http://www.cs.nott.ac.uk/~gmh/afp.html<br />
<br />
<b>Instructor:</b> [mailto:rjmh@cs.chalmers.se John Hughes]<br />
Chalmers University, Gothenburg<br><br />
<b>Course:</b> Advanced Functional Programming<br><br />
<b>Student background:</b> General CS maturity; from this year most students have already used Haskell in introductory courses.<br><br />
<b>Materials:</b> Mainly hbc.; Papers (see web page)<br><br />
<b>Web page:</b> http://www.cs.chalmers.se/~rjmh/AFP<br><br />
<b>Comments:</b><br />
<blockquote><br />
The goal is to teach students how to solve substantial problems in a<br />
functional language --- `functional programming in anger', one might say. The<br />
emphasis is on design and use of suitable combinator libraries to simplify<br />
applications. Material covered includes monad design, use of CPS style,<br />
libraries for parsing, pretty-printing, and GUIs (presently fudgets). <br />
<br />
The course is taught in a `problem based' manner: lectures are few, while<br />
students solve three substantial programming problems during the term, with<br />
plenty of backup via group meetings. I adopted this teaching form three years<br />
ago, and it has led students to develop far better practical skills than most<br />
obtained from my earlier `lectures and exercises' courses, and I believe to<br />
use Haskell much more after the course's end.<br />
<br />
This course is optional in the third or fourth year, and is taken by a<br />
small-to-medium sized group of students.<br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:Olof.Johanssson@cs.umu.se Olof Johansson], Umeå Univesity, Department of Computing Science<br><br />
<b>Course:</b> Programming language semantics<br><br />
<b>Student background:</b> two terms of computer science studies and specificaly a course Programming language concepts<br><br />
<b>Materials:</b> Hugs and some HBC and GHC; Watt, Programming language, Syntax and Semantics<br><br />
<b>Web page:</b> http://www.cs.umu.se/local/kurser/TDBC05 (Only in swedish)<br> <br />
<br />
<br />
<b>Instructor:</b> [mailto:lyndon@cs.uwa.edu.au Lyndon While]<br />
The University of Western Australia<br><br />
<b>Course:</b> Functional Programming<br><br />
<b>Student background:</b> OOP, plus most of them have used Haskell previously<br><br />
<b>Materials:</b> hugs 98; none of the recent books really fit<br><br />
<b>Web page:</b> http://undergraduate.cs.uwa.edu.au/courses/230.301<br><br />
<b>Instructor:</b> [mailto:F.A.Rabhi@dcs.hull.ac.uk Fethi Rabhi],<br />
University of Hull (UK)<br><br />
<b>Course:</b> AI Problem Solving Techniques (using Haskell and Prolog)<br><br />
<b>Student background:</b> Haskell and Prolog programming<br><br />
<b>Materials:</b> HUGS; Thompson'96, own notes (soon to be published as a book).<br><br />
<b>Web page:</b> none<br><br />
<b>Comments:</b><br />
<blockquote><br />
It is very hard to justify learning Haskell unless it can be<br />
demonstrated in very practical situations (hence the provision<br />
of the above course).<br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:karczma@info.unicaen.fr Jerzy Karczmarczuk]<br />
University of Caen, Caen (France)<br> No links in the fr-Haskell page. Why not ?<br />
<b>Course:</b> Compilation<br><br />
<b>Student background:</b> General CS knowledge; students (should...) know Scheme and imperative languages, also some theory of languages and automata.<br><br />
<b>Materials:</b> <br />
Hugs, GHC, now also GHCi, and their documentation. Handouts: (still a little incomplete)<br />
Impossible to find the foolowing matterials.Files can not be found. <br />
* http://users.info.unicaen.fr/~karczma/matrs/Maitcomp/compilation_a.pdf<br />
* http://users.info.unicaen.fr/~karczma/matrs/Maitcomp/compilation_b.pdf<br />
* http://users.info.unicaen.fr/~karczma/matrs/Maitcomp/compilation_c.pdf<br />
<b>Comments:</b><br />
<blockquote><br />
This is a compulsory semestrial course in fourth year. Weekly: 1.5h<br />
course, 2.5H practice.<br />
One, but comprehensive assignment, taking 2 months or more.<br />
askell is our main coding tool. A little time is devoted by necessity<br />
to the language<br />
itself, but also from the perspective: "how would you compile such a<br />
language".<br />
"Standard stuff", such as parsing combinators, etc.is covered, but we<br />
don't begin with that.<br />
We start with the construction of small interpreters: from recursive<br />
Lisp-style to postfix,<br />
(Forth/PostScript style) constructing this last by partial evaluation<br />
(intuitively).<br />
We introduce control structures as lazy functions, operation<br />
sequencing through continuations,<br />
monads not only for parsing, but also for exceptions and<br />
non-determinism.<br />
We discuss (simply) the type inference. The code generator assembles a<br />
linear code by lazy<br />
concatenation of chunks which makes it trivial to deal with loops and<br />
cross-referencing<br />
fragments. Algorithms of garbage collection are presented (not<br />
implemented, though...) in<br />
a purely functional style.<br />
<br />
Students' opinion: "Frightening at first. Learning curve steep, but<br />
much less time spent on debugging, coding proficiency comes fast. Good for<br />
understanding what the compilation is about, but difficult to make a<br />
complete running program with all the I/O, etc.<br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:jeffm@cse.uconn.edu Jeffrey A. Meunier], University of Connecticut<br><br />
<b>Course:</b> CSE240 Intermediate Computer Systems<br><br />
<b>Student background:</b> computer/microprocessor organization<br />
<br><br />
<b>Materials:</b> Hugs (Feb 2001); Bird ``Introduction to Functional<br />
Programming''; Furber ``ARM System-on-Chip Architecture''<br />
<br><br />
<b>Web page:</b> http://www.engr.uconn.edu/~jeffm/Classes/CSE240-Spring-2001/index.html<br> <br />
<b>Comments:</b><br />
<blockquote><br />
This is a course in the low level programming of microprocessor systems.<br />
The course will focus on the development of an emulator (virtual<br />
machine, or VM) for a small computer system based on a modern RISC<br />
microprocessor (the ARM CPU) using a high level programming language<br />
(Haskell), and assembly language programming of the VM. Development of<br />
the VM will occur in stages, starting with the simple direct-execution<br />
(stream-based) model, gradually moving to a more realistic memory-mapped<br />
model, including exception handlers, concurrent processes, and<br />
asynchronous external devices.<br />
</blockquote><br />
<br />
<b>Instructor:</b> Gabriele Keller<br />
The University of New South Wales<br><br />
<b>Course:</b> Concepts of Programming Languages<br><br />
<b>Student background:</b> Most of them have used Haskell in first year<br><br />
<b>Materials:</b> GHC, TaPL and `Programming Languages: Theory and Practice', papers<br><br />
<b>Web page:</b> http://www.cse.unsw.edu.au/~cs3161<br><br />
<b>Last run:</b> 2006<br><br />
<b>Comments:</b><br />
<blockquote><br />
Expose students to a theory of programming languages based on type<br />
theory and operational semantics as a mathematically sound framework<br />
which allows us to investigate the properties of a large number of<br />
programming language features, including:<br />
<br />
* on semantics of different programming languages and programming paradigms: imperative, object oriented, and declarative.<br />
* theoretical foundations of programming languages: syntax, operatational, axiomatic and denotational semantics.<br />
* implementation aspects of central language features, such as dynamic and strong typing, polymorphism, overloading and automatic memory management<br />
<br />
Assignments are in GHC/Haskell, and in the past have included implementing a<br />
mini-Haskell type checker, type inference and interpreter.<br />
</blockquote><br />
<br />
<b>Instructor:</b> Manuel Chakravarty<br />
The University of New South Wales<br><br />
<b>Course:</b> Advanced Functional Programming<br><br />
<b>Student background:</b> Most of them have used Haskell in first year<br><br />
<b>Materials:</b> GHC, papers (see the website)<br><br />
<b>Web page:</b> http://www.cse.unsw.edu.au/~cs4132<br><br />
<b>Last run:</b>2004<br><br />
<b>Comments:</b><br />
<blockquote><br />
To provide students with an understanding of the theory and practice of<br />
the design, use, and implementation of functional programming languages,<br />
such as Haskell<br />
<br />
This includes selected topics from the following areas:<br />
<br />
* Foundations: lambda calculus, semantics, and type systems.<br />
* Design: side-effects, exceptions, concurrency, and parallelism.<br />
* Implementation: abstract machines, program transformation, and memory management. <br />
* Programming techniques: combinator libraries, monads, generic programming, and meta programming.<br />
* Applications: domain specific languages, graphics, web programming, reactive systems, and scientific programming.<br />
</blockquote><br />
<br />
[[Category:Community]]</div>Aivanhttps://wiki.haskell.org/index.php?title=Haskell_in_education&diff=55920Haskell in education2013-05-13T15:19:25Z<p>Aivan: /* Haskell as a second language */</p>
<hr />
<div>[[Category:Education]]<br />
This is a collection of material of interest to those teaching or<br />
taking courses that use Haskell. There is also a more general site,<br />
http://www.cs.kun.nl/fple/, devoted to all functional languages. The proceedings of the latest<br />
[http://www.informatik.uni-kiel.de/~mh/publications/reports/fdpe02/ International Workshop on Functional and Declarative Programming in Education (FDPE)] are now available.<br />
Some of the lecture notes and<br />
other course material found in these web pages are excellent<br />
supplements to the available text books.<br />
If you would like to use lecture<br />
notes, assignments, or other material found in these course web pages<br />
please contact the author for permission.<br />
<br />
Most of the entries are years old. When you add your own new<br />
material to this page, please also say when the course was run for the last time.<br />
<br />
The results of a survey of university courses using Haskell in the academic year 2005-2006 can be found [http://www.cs.chalmers.se/~rjmh/Wash/Survey/teaching.htm here]. Also, some news were added during the 2006-2007 academic year.<br />
<br />
== Suitable Course Textbooks ==<br />
<br />
See [[Books#Textbooks]].<br />
<br />
== Haskell as a first language ==<br />
<br />
These courses teach Haskell to students with no background in programming.<br />
<br />
<b>Instructor:</b> [http://homepages.inf.ed.ac.uk/wadler/ Philip Wadler] University of Edinburgh<br><br />
<b>Course:</b> [[Informatics 1 - Functional Programming]]<br><br />
<b>Materials:</b> GHCi, Emacs, Thompson: Haskell, the Craft of Functional Programming<br><br />
<b>Web page:</b> http://www.inf.ed.ac.uk/teaching/courses/inf1/fp/ <br><br />
<br />
<br />
<b>Instructor:</b> [mailto:page@ou.edu Rex Page] <br />
University of<br />
Oklahoma<br><br />
<b>Course:</b> Introduction to Computer Programming<br><br />
<b>Student background:</b> High-school mathematics<br><br />
<b>Materials:</b> Projects, Exams, Downloadable textbook: Rex Page, <br />
&quot;Two<br />
Dozen Short Lessons in Haskell&quot;<br><br />
<b>Web page:</b> http://www.cs.ou.edu/~rlpage/fpclassSpring97/<br />
<br />
<b>Comments:</b><br />
<blockquote><br />
These materials arose from a course offered for three consecutive<br />
semesters as<br />
an alternative to our usual first course in programming. Most of the<br />
students<br />
who took the course graduated in the past two years, and many of them<br />
cited it<br />
in the exit interview with the department chair as the most influential<br />
course<br />
in the entire academic career.<br />
<p>All materials for two offerings of the course are available through<br />
the web<br />
page. This includes individual projects, team projects, project<br />
solutions,<br />
exams, supplied software (connected with certain projects), tips for<br />
students<br />
taking the course, FAQs addressing questions that students asked during<br />
the<br />
semester, and a short textbook which served as the primary text in the<br />
course.</p><br />
<p>The first 10 to 11 weeks of the course use Haskell. Students are<br />
required to<br />
write nine programs in Haskell, three of which are team projects that<br />
combine<br />
software developed in individual projects. Different members of a team<br />
are<br />
assigned different individual projects, and the team efforts combine<br />
their<br />
solutions into a working piece of software.</p><br />
<p>In the early part of the course, students use operators like map,<br />
foldr, zip,<br />
and iterate to express computations. Explicit recursion is introduced<br />
after some<br />
experience with these common patterns of computation. Examples and<br />
problems<br />
address non-numeric applications, for the most part. Both interactive<br />
and file<br />
I/O are covered, but general purpose monads are not.</p><br />
<p>The last 5 to 6 weeks of the course use C, and most of the projects<br />
in that<br />
part of the course duplicate the function of earlier pieces of software<br />
that the<br />
students have written in Haskell.</p><br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:Jonathan.Hill@comlab.ox.ac.uk Jonathan Hill]<br />
Oxford University Computing Laboratory<br><br />
<b>Course:</b> Functional Programming for the Integrated Graduate Development Programme in Software Engineering at Oxford University.<br><br />
<b>Student background:</b> Discrete mathematics (the course is a part time MSc for people from industry; most are from IBM or Nortel).<br><br />
<b>Materials:</b> Gofer (an old version, with a stripped down prelude---no parameter classes!); Own course material<br><br />
<b>Web page:</b> http://www.comlab.ox.ac.uk/igdp/text/course06.html<br />
Note: Web pages not accessible. May be ... moved ? <br />
<br />
<br />
<b>Instructor:</b> [mailto:nxg@cs.nott.ac.uk Neil Ghani]<br />
School of Computer Science, University of Nottingham<br><br />
<b>Course:</b> Functional Programming<br><br />
<b>Student background:</b> None<br><br />
<b>Materials:</b> Hugs; Graham Hutton, Programming in Haskell; own lecture slides<br><br />
<b>Web page:</b> http://www.cs.nott.ac.uk/~nxg/G51FUN06/fun.html<br />
<br />
<b>Instructor:</b> [mailto:prins@cs.unc.edu" Jan Prins]<br />
UNC Chapel Hill<br><br />
<b>Course:</b> Introduction to Functional Programming<br><br />
<b>Student background:</b> solid background in high-school science and mathematics<br><br />
<b>Materials:</b> Hugs 1.4 incl. Active Haskell, FRAN and [[Haskore]]; Simon Thompson, "Haskell: The Art of Functional Programming"<br><br />
<b>Web page:</b> http://www.cs.unc.edu/~prins/Classes/15/<br><br />
<b>Comments:</b><br />
<blockquote><br />
(Introductory programming course for CS and math/science majors, typically Freshman and Sophomores. Class size ~60)<br />
<br />
Our undergraduate computing environment is now largely<br />
PCs running Windows NT. We use NTEmacs as the programming<br />
environment with a slightly modified version of Emacs hugs<br />
mode with hugs running as a subprocess. The combined<br />
hugs/NTEmacs/Active Haskell distribution (available through<br />
course home page) is installed on 400+ public Win NT machines<br />
on campus and some unknown number of student-owned Win 95/98<br />
machines.<br />
<br />
This arrangement is new this semester, but so far has been<br />
working well. Keystroke-oriented interactive applications<br />
may be problematic with hugs running in NTEmacs shell mode.<br />
<br />
I'm planning assignments using Fran and Active Haskell and<br />
will try teaching the "brief introduction to imperative<br />
programming" at the end of the class using monads. I would<br />
be interested in talking with anyone who has experience or<br />
suggestions along these lines.<br />
<br />
I took a cue from Paul Hudak and others and have occasional<br />
appearances of MS Agents during lectures to wake students up!<br />
<br />
This is my first time teaching this course, and I would<br />
enjoy talking to others teaching at a similar level. A<br />
cursory search on the web didn't reveal many courses<br />
in this category.<br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:dave@cs.chalmers.se David Sands]<br />
University of Gothenburg & Chalmers University of Technology<br><br />
<b>Course:</b> Programmering för Naturvetare<br><br />
<b>Student background:</b> New students<br><br />
<b>Materials:</b> hugs 1.4; Simon Thompson<br><br />
<b>Web page:</b> http://www.md.chalmers.se/Cs/Grundutb/Kurser/nptah/<br><br />
<b>Comments:</b><br />
<blockquote><br />
This is the first part of a first course in programming. About 16<br />
lectures, each 2x45 mins plus weekly exercise classes and three<br />
assessed programming exercises. Most of my materials are in English.<br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:M.A.Rodrigues@dcs.hull.ac.uk Marcos A Rodrigues]<br />
The University of Hull, Hull, UK<br><br />
<b>Course:</b> Functional and Logic Programming<br><br />
<b>Student background:</b> none<br><br />
<b>Materials:</b> hugs 1.4; Haskell: the Craft of Functional Programming. Thompson S., Addison Wesley, 1996.<br><br />
<br />
<b>Instructor:</b> [mailto:Torsten.Grust@uni-konstanz.de Torsten Grust]<br />
University of Konstanz (Germany)<br> <br />
<b>Course:</b> Deklarative Programmierung (Declarative Programming, in german)<br><br />
<b>Student background:</b> basic math, no programming background required<br><br />
<b>Materials:</b> Hugs 1.4; (~300) slides available from the course web page;<br />
Jeroen Fokker's classroom text: Functional Programming<br />
http://www.cs.uu.nl/~jeroen/courses/fp-eng.ps.gz</a>;<br />
Richard Bird, Phil Wadler: Introduction to Functional Programming; Simon Peyton-Jones: Implementation of Functional Programming Languages<br><br />
<b>Web page:</b> http://www.fmi.uni-konstanz.de/dbis/Courses-old/Courses-ss98/decl-ss98.html<br><br />
<b>Comments:</b><br />
<blockquote><br />
The course is in German only (sorry about that). It additionally<br />
features an introduction to logical programming and Prolog.<br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:richardb@cse.unsw.edu.au Richard Buckland]<br />
University of New South Wales<br><br />
<b>Course:</b> Computing 1A<br><br />
<b>Student background:</b> Mixed, some have no computing<br />
background. This is our cs1 subject.<br><br />
<b>Materials:</b> Hugs 1.4; Simon Thompson<br><br />
<b>Web page:</b> http://www.cse.unsw.edu.au/~cs1011<br><br />
<br />
<br />
<b>Instructor:</b> [mailto:robert@techfak.uni-bielefeld Robert Giegerich], Stefan Posch, University Bielefeld, Germany<br><br />
<b>Course:</b> Introduction to Computer Science<br><br />
<b>Student background:</b> Completed High School (Abitur)<br><br />
<b>Materials:</b> Hugs; Class Notes by Robert Giegerich and Ralf Hinze<br><br />
<b>Comments:</b><br />
<blockquote><br />
Our first semester course<br />
uses Haskell as a vehicle to fundamental aspects of computation:<br />
algorithmics, specification and verification, efficiency analysis,<br />
programming methods. This works wonderfully. We do not require previous<br />
or additional programming experience. Haskell is quickly learned, <br />
to the necessary degreee; we make no attempt to cover the full language.<br />
This is NOT a Haskell course! Haskell allows us to speak about concepts<br />
of computer science WITHOUT a lot of language learning. And Haskell<br />
even helps to keep out detrimental habits from previous programming<br />
experience, as well as motivational problems resulting from the widely<br />
differing previous experiences of our incoming students.<br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:hj@sm.luth.se Håkan Jonsson] Luleå University of Technology, Sweden<br><br />
<b>Course:</b> SMD001, functional programming<br><br />
<b>Student background:</b> <br />
None. This is the very first programming course <br />
our students take.<br><br />
<b>Materials:</b> <br />
Materials: Simon Thompson's Haskell book + 7 laboratory/programming <br />
assignments using Hugs.<br />
<br><br />
<b>Web page:</b>http://www.sm.luth.se/csee/courses/smd/001/ (mostly Swedish)<br> <br />
<br />
<br />
<b>Instructor:</b> [mailto:Clem.Baker-Finch@cs.anu.edu.au Clem Baker-Finch, Australian National University<br><br />
<b>Course:</b>Introduction to Programming and Algorithms<br><br />
<b>Student background:</b> No programming background was<br />
assumed.<br />
<br><br />
<b>Materials:</b> GHC, GHCi, Simon Thompson 1st ed., my own materials. <br />
<br><br />
<b>Web page:</b> http://cs.anu.edu.au/Student/comp1100/<br> <br />
<b>Comments:</b><br />
<blockquote><br />
The first 75% of the course is basic programming concepts using Haskell. The remainder covers the same concepts in Java. This is reinforced - hopefully - by the third assignment (in Java) being the same as the first assignment (in Haskell). The aim is to provide a managed transition to the course which follows in second semester. Another point of possible interest is the use of a simple graphics library, ANUPlot, built on top of the OpenGL binding. See http://code.google.com/p/anuplot/<br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:lyndon@cs.uwa.edu.au Lyndon While] The University of Western Australia<br><br />
<b>Course:</b> Foundations of Computer Science<br><br />
<b>Student background:</b> None<br><br />
<b>Materials:</b> hugs 98; Thompson.<br><br />
<b>Web page:</b> http://undergraduate.cs.uwa.edu.au/courses/230.123<br><br />
<br />
<br />
<b>Instructor:</b> [http://www.cs.us.es/~jalonso José A. Alonso Jiménez] Dept of Computer Science and A.I., University of Seville, Spain<br><br />
<b>Course:</b> Informatics (Inform&aacute;tica, in spanish)<br><br />
<b>Student background:</b> None. This is the very first programming course <br />
our students take.<br><br />
<b>Materials:</b> GHCi, Emacs, Graham Hutton: &quot;Programming in Haskell&quot;, Slides, Exercises, Exams <br><br />
<b>Web page:</b> http://www.cs.us.es/~jalonso/cursos/i1m (in spanish)<br><br />
<b>First run:</b> 2009–2010<br><br />
<b>Last run:</b> 2012–2013<br />
<br />
----<br />
<br />
== Haskell as a second language ==<br />
<br />
These courses teach Haskell to students that have already learned<br />
another language.<br />
<br />
<b>Instructor:</b> [mailto:page@ou.edu Rex Page]<br />
University of Oklahoma<br><br />
<b>Course:</b> Discrete Mathematics<br><br />
<b>Student background:</b> High-school mathematics, introductory programming<br />
course (any language)<br><br />
<b>Materials:</b> Lecture notes, Projects, Exams, Solutions, Proof checking<br />
tools, etc.; text: Hall and O'Donnell, &quot;Discrete Mathematics with a<br />
Computer&quot;<br><br />
<br />
<b>Web page:</b> http://www.cs.ou.edu/~beseme/<br><br />
<b>Comments:</b><br />
<blockquote><br />
Lecture notes comprise over 350 animated slides (all both PowerPoint and<br />
PDF<br />
formats). About two-thirds of the material centers around mathematical logic.<br />
After the introduction of predicates, all of the examples in the logic<br />
portion<br />
of the course involve reasoning about properties of software, most of which is<br />
expressed in Haskell (a few are conventional looping functions).<br />
<p>Software examples include sum, sequence concatenation, logical operations on<br />
sequences, the Russian peasant algorithm, insertion and lookup in AVL <br />
trees, and<br />
other computations. Most of the properties verified relate to aspects of <br />
program<br />
correctness, but resource utilization properties are also verified in <br />
some<br />
cases. Several semesters worth of exams (finals and exams given during <br />
the term)<br />
are provided. The slides have matured through several offerings of the course.</p><br />
<p>The remaining third of the course discusses other standard topics<br />
in discrete<br />
mathematics, such as sets, functions, relations, trees, and counting.<br />
The web<br />
page provides access to a preview of the material. Exams and solutions are<br />
protected by a login procedure (to increase the comfort level of<br />
instructors<br />
wishing to use them in courses). The web page provides a link through<br />
which<br />
instructors may gain access to the full website.</p><br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:labra@lsi.uniovi.es Jose Emilio Labra Gayo],<br />
Dept. of Computer Science (EUITIO) University of Oviedo<br><br />
<b>Course:</b> Logic and Functional Programming<br><br />
<b>Student background:</b> The course is oriented towards third year undergraduate students in computer science. Usually, the students have been<br />
introduced to imperative languages like Pascal and Object <br />
Oriented Languages like C++<br><br />
<b>Materials:</b> Hugs; R. Bird "Introd. to FP using Haskell" (2nd Ed), J. E. Labra Gayo. "Introduction to the Haskell Language" (in spanish).<br><br />
<b>Web page:</b> http://lsi.uniovi.es/~labra/plf.html (in spanish).<br />
My FP page: http://lsi.uniovi.es/~labra/FuncProg.html<br><br />
<br />
<br />
<b>Instructor:</b> [mailto:fruehr@willamette.edu Fritz Ruehr]<br />
Willamette University, Salem, Oregon, USA (a small Liberal Arts College, about 1 hour from Portland & OGI)<br><br />
<b>Course:</b> CS 451 Topics in Computer Science: Functional Programming<br><br />
<b>Student background:</b> Data structures (I may also have required discrete math)<br><br />
<b>Materials:</b> Hugs 1.4 beta (I also taught Scheme); Haskell: The Craft of Functional Programming by Simon Thompson (I also used my own on-line lecture notes and labs and Kent Dybvig's text on Scheme)<br><br />
<b>Web page:</b> http://www.willamette.edu/~fruehr/451/<br><br />
<b>Comments:</b><br />
<blockquote><br />
The notes and labs I have on-line are in pretty rough form: many slide <br />
points are just one-line topical stubs I used as reminders in lecture.<br />
Many of the on-line materials are not linked into the (out of date)<br />
home page.<br />
<br />
I hope to have the course approved for next Fall as a regular offering<br />
(i.e., not as a "special topic") and should have more extensive<br />
on-line materials up by then.<br />
<br />
Teaching "bi-lingually" in Haskell and Scheme seemed like a good idea<br />
at the time, but next time around I will use Haskell as the main vehicle,<br />
perhaps taking some time near the end of the course to highlight some<br />
other languages (Scheme, ML, Clean).<br />
<br />
Some of my students used Conal Elliot's Fran and Paul Hudak's Haskore<br />
and liked them a lot; I was nice to have some significantly-sized<br />
applications that seemed more practical and fun to show off at the end<br />
of the course (I should have demonstrated these things at the beginning<br />
of the course to help with motivation). Next time around I would like to<br />
have a "beginner's prelude" or similar available to avoid problems with<br />
classes in type inference, Int vs. Integer, etc. These problems were a<br />
constant annoyance during lectures.<br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:J.Hamer@cs.auckland.ac.nz John Hamer],<br />
University of Auckland<br><br />
<b>Course:</b> Logic and Functional Programming<br><br />
<b>Student background:</b> Year 2 programming + some discrete maths<br><br />
<b>Materials:</b> Hugs 98, Haskell School of Expression, Page "Two Dozen Short Lessons in Haskell",<br><br />
<b>Web page:</b> http://www.cs.auckland.ac.nz/compsci360fc<br><br />
<br />
<br />
<b>Instructor:</b> [mailto:lengauer@fmi.uni-passau.de Chris Lengauer]<br />
University of Passau<br><br />
<b>Course:</b> Functional Programming<br><br />
<b>Student background:</b> two years of CS study<br><br />
<b>Materials:</b> hugs; Richard Bird's new text (PHI)<br><br />
<b>Web page:</b> not reachable from outside Passau<br><br />
<br />
<br />
<b>Instructor:</b> [mailto:cunningham@cs.olemiss.edu Conrad Cunningham]<br />
University of Mississippi<br><br />
<b>Course:</b> Functional Programming<br><br />
<b>Student background:</b> official -- senior or graduate standing; actual -- introductory programming, data structures, and discrete math<br><br />
<b>Materials:</b> Hugs on Unix and MS Windows systems;<br />
Mostly use the instructor's own set of lecture notes. Also Simon Thompson's HASKELL: THE CRAFT OF FUNCTIONAL PROGRAMMING. Previously used the Bird and Wadler textbook<br><br />
<b>Web page:</b> http://www.cs.olemiss.edu/~hcc/csci555/<br><br />
<b>Comments:</b><br />
<blockquote><br />
Although I am not a researcher in FP, I enjoy teaching the FP course.<br />
Most of the students take to the course after a few weeks. Hugs works<br />
reasonably well, but, of course, more pedagogically oriented error messages<br />
and other support tools would be helpful.<br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:leavens@cs.iastate.edu Gary T. Leavens],<br />
Iowa State University<br><br />
<b>Course:</b> Programming Languages 1<br><br />
<b>Student background:</b> undergraduate course in compilers or programming languaages<br><br />
<b>Materials:</b> Hugs 1.4; Thompson's Haskell: The Craft of Programming<br><br />
<b>Web page:</b> http://www.cs.iastate.edu/~leavens/ComS541.html<br><br />
<b>Comments:</b><br />
<blockquote><br />
Be sure to tell your students how to debug programs.<br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:jtod@dcs.gla.ac.uk John O'Donnell]<br />
University of Glasgow<br><br />
<b>Course:</b> Functional Programming<br><br />
<b>Student background:</b> Programming (in Ada), Algorithmic Foundations<br><br />
<b>Materials:</b> Hugs; Simon Thompson's book on Haskell<br><br />
<b>Web page:</b> http://www.dcs.gla.ac.uk/courses/teaching/level2/modules/#FP2<br><br />
<br />
<b>Instructor:</b> [mailto:chitil@informatik.rwth-aachen.de Olaf Chitil],<br />
RWTH Aachen, Germany<br><br />
<b>Course:</b> Functional Programming in Haskell<br><br />
<b>Student background:</b> basic programming skills (not necessarily in a<br />
functional language)<br><br />
<b>Materials:</b> Hugs 1.4; Hugs user manual, slide copies;<br />
additionally the `Gentle Introduction to Haskell', probably Bird's `Introduction<br />
to Functional Programming using Haskell' in the future.<br><br />
<b>Web page:</b> http://www-i2.informatik.rwth-aachen.de/Praktikum/SWP/ (in German)<br><br />
<b>Comments:</b><br />
<blockquote><br />
The course starts with 4 full time days of learning Haskell. During the semester<br />
the students (in groups of 2 students) have to implement a compiler and an<br />
abstract machine for a simple imperative language. They are given parts of the<br />
system and a manual on how to do the remaining parts (they have no prior<br />
knowledge on compiler construction).<br />
The most difficult construct for students to understand is the monad. I<br />
introduce IO without mentioning monads. Later I explain how to build a simple<br />
exception handling system based on the type `Maybe a' / `Error a'. Only<br />
subsequently I give the general definition of monads and present the list monad<br />
and a simple state monad. However, I fear that just to understand the bind<br />
operator `>>=' requires people to be quite comfortable with higher-order<br />
functions.<br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [http://web.comlab.ox.ac.uk/oucl/people/richard.bird.html Richard Bird], Oxford Brookes University<br><br />
<b>Course:</b> Functional Programming<br><br />
<b>Student background:</b> Elementary structured programming<br><br />
<b>Web page:</b> http://web.comlab.ox.ac.uk/oucl/courses/topics00-01/fp/<br><br />
<br />
<br />
<b>Instructor:</b> [mailto:paul.hudak@yale.edu Paul Hudak],<br />
Yale University, Dept of Computer Science<br><br />
<b>Course:</b> Functional Programming<br><br />
<b>Student background:</b> at least one programming course<br><br />
<b>Materials:</b> Hugs; my own textbook, which is under preparation<br><br />
<b>Web page:</b> none<br><br />
<br />
<br />
<b>Instructor:</b> [mailto:abf@cs.ucc.ie Alex Ferguson]<br />
University College Cork<br><br />
<b>Course:</b> Functional and Logic Programming<br><br />
<b>Student background:</b> Final year undergraduate<br />
<br><br />
<b>Materials:</b> Final year undergraduate<br />
Materials: Hugs 98; ghc; Simon Thompson, "Haskell: The Craft of<br />
Functional Programming" (2nd ed.)<br />
<br><br />
<b>Web page:</b> http://yeats.ucc.ie/~abf/CS4001/<br> <br />
<b>Comments:</b><br />
<blockquote><br />
This is the declarative programming option for 4th year<br />
undergrads, who have Java as a first programming language, and some<br />
knowledge of C and C++. The current final year have had some exposure<br />
to Haskell in first year, though this is no longer the case for our<br />
current intake.<br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:lky@nada.kth.se Leif Kusoffsky],<br />
Royal Institute of Technology, Stockholm<br><br />
<b>Course:</b> Functional Programming 2D1370<br><br />
<b>Student background:</b> The course is oriented towards third year<br />
undergraduate students in computer science. The students<br />
have been introduced to imperative languages like<br />
C and Object Oriented Languages like Java<br />
<br><br />
<b>Materials:</b> Hugs; Hudak : The Haskell School of Expression<br />
<br><br />
<br />
<br />
<b>Instructor:</b> Jeremy Bobbio -- INSIA<br><br />
<b>Course:</b> Functional and Logic Programming<br><br />
<b>Student background:</b> One year CS<br />
<br><br />
<b>Materials:</b> <br />
Hugs, GHC, Paul Hudak's Haskell School of Education<br />
<br><br />
<b>Web page:</b> http://etudiants.insia.org/~jbobbio/pafp/ (french)<br> <br />
<br />
<br />
<b>Instructor:</b> [mailto:antkaij@mit.jyu.fi Antti-Juhani Kaijanaho]<br />
University of Jyväskylä<br><br />
<b>Course:</b> Functional Programming 1 & 2<br><br />
<b>Student background:</b> third-year undergraduate and up<br />
<br><br />
<b>Materials:</b><br />
GHC, Gtk2HS<br />
<br><br />
<b>Web page:</b> [http://www.mit.jyu.fi/antkaij/opetus/fo/2005-2006/index.en.html]<br />
<br><br />
<b>Last run:</b> 2005&ndash;2006<br />
<br><br />
<!--<b>Comments:</b><br />
<blockquote><br />
(I'll write this later)<br />
</blockquote>--><br />
<br />
<b>Instructor:</b> [mailto:djd@comp.leeds.ac.uk David Duke]<br />
University of Leeds, School of Computing<br><br />
<b>Course:</b> Functional Programming<br><br />
<b>Student background:</b> Second and third year undergraduate<br />
<br><br />
<b>Materials:</b> ghc; Graham Hutton "Programming in Haskell"<br />
<br><br />
<b>Web page:</b> www.comp.leeds.ac.uk/se23/<br> <br />
<b>Comments:</b><br />
<blockquote><br />
This is an optional course that students currently can take in <br />
second or third year (from 2008/9 it will be third-years only).<br />
Students will have previously used Python and Java.<br />
Although the emphasis is on learning to solve problems within<br />
the functional paradigm, and how to develop solutions within<br />
Haskell, I also like to show students what is "under the<br />
bonnet" and conclude the module with an introduction to<br />
implementation issues, using material derived from<br />
"Implementing Functional Languages" by Simon Peyton Jones and <br />
David Lester. <br />
</blockquote><br />
<br />
<b>Instructor:</b> [mailto:popavdan@yahoo.com Popa V. Dan]<br />
University of Bacau, Romania <br><br />
<b>Course:</b> "Limbaje formale si automate" (Formal languages and automata) <br><br />
<b>Student background:</b> second-year undergraduate <br />
<br><br />
<b>Materials:</b> Hugs 98 (2002 revised version) included in Mandriva (Formely Mandrake) 10.0 Linux Distribution<br />
<br><br />
<b>Web page:</b> Not yet. Try the page of the "ro" community on www.haskell.org<br />
<br> [http://www.haskell.org/haskellwiki/Ro/Haskell Ro/Haskell webpage is here] <br><br />
<b>First run:</b> 2006&ndash;2007<br />
<br><br />
<br />
Haskell is used as an implementation languages in student's laboratories.<br />
The ideea was to provide a language powerfull enough to be able to express <br />
how to build a parser starting from a grammmar. The students are able<br />
to build small (monadic) interpreters for "while-languages" using a <br />
recommanded monad and a recommanded back-end. The labs are focusing on the <br />
grammar of the languages, on the modular (monadic) parsing as a tool for <br />
verifying and processing inputs which are not validable by finite state <br />
automata but by context free grammmars. Adaptability of the language, <br />
especially obtained manipulating and improving syntax is also a target.<br />
<br />
Support (concerning Haskell): "O introducere in Haskell prin exemple" by<br />
Dan Popa, published in january 31,2007 by <br />
[http://www.edusoft.ro Edusoft](in romanian) Contact the author if needed .<br />
<br />
Other recommanded books: "Gentle Introd to Haskell 98" and YAHT <br />
Recomanded papers: All about monadic parsing. <br />
Special message for Graham Hutton, Erik Meijer and P. Wadler and all <br />
other authors with similar interests from the Haskell <br />
community:<br />
<br />
Thank you very much for your papers concerning Monadic parsing and <br />
interpreters ! <br />
<br />
'''Instructors:''' Involved people [http://www.pdep.com.ar/Home/quines-somos] National and Technological University, Buenos Aires, Argentina Universidad Tecnológica Nacional - Facultad Regional Buenos Aires)<br><br />
'''Course:''' Programming Paradigms <br><br />
'''Student background:''' This is a second-year undergraduate course. Students have already been introduced to basic structured programming concepts. <br><br />
'''Materials:''' Pharo Smalltalk; LOOP [http://www.esug.org/wiki/pier/Conferences/2011/InnovationTechnologyAwards] , SWI-Prolog, Hugs, GHC, "Learn You a Haskell For a Great Good" (Spanish Version) <br><br />
<blockquote><br />
Students are being introduced to three main programming paradigms:<br />
<br />
• Object Oriented Programming <br><br />
• Logical Programming <br><br />
• Functional Programming <br><br />
</blockquote><br />
<br />
----<br />
<br />
== Comparative programming languages ==<br />
<br />
These courses teach general programming language principles, with<br />
Haskell as an example of a functional language.<br />
<br />
<b>Instructor: </b> Ruediger Marcus Flaig, University of Heidelberg (Germany)<br />
<br><br />
<b>Course:</b> An introduction to programming in bioinformatics <br><br />
<b>Student background:</b> different, but generally low<br><br />
<b>Materials:</b> Hugs-98 and lots of other stuff<br />
<br><br />
<b>Web page:</b> http://www.sanctacaris.net/rc.html<br> <br />
<b>Comments:</b><br />
<blockquote><br />
This course is designed to introduce life science students,<br />
that is to say, going-to-be biologists, physicians, biotechnologists<br />
and maybe others, to solving real-life problems (such as DNA sequence<br />
handling and analysis). Emphasis will be on paradigms (imperative /<br />
OO, functional, declarative). Although -- in order not to frighten<br />
people -- the official announcement mentions only Python, Haskell will<br />
be presented as THE purely functional language, and all solutions may<br />
be presented in either Python, Haskell or Java. I am very curious<br />
about the feedback I'll get, and maybe next term we shall focus more<br />
on Haskell. What I'd really need, though, is some life science related<br />
package for Haskell, such as BIOPYTHON and BIORUBY. <br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:ham@cs.utexas.edu Hamilton Richards],<br />
University of Texas (Austin)<br><br />
<b>Course:</b> Programming Languages (taught in 2005)<br><br />
<b>Student background:</b> <br><br />
<b>Materials:</b> Hugs 1.4; Sethi, Davie.<br><br />
<b>Web page:</b> http://www.cs.utexas.edu/users/ham/UTCS/CS345/<br><br />
<b>Comments:</b><br />
<blockquote><br />
I'm using Haskell in a programming-languages course, but it's distributed<br />
somewhat piecemeal through the course. Probably adds up to something like<br />
3-4 weeks (out of 15).<br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [http://www.cs.waikato.ac.nz/~marku Mark Utting]<br />
University of Waikato (New Zealand)<br />
<b>Course:</b> Programming Languages<br><br />
<b>Student background:</b> Two years of C++ and 1 year of Haskell<br><br />
<b>Materials:</b> Textbook "Programming Languages", Louden.<br />
<b>Web page:</b> http://www.cs.waikato.ac.nz/~marku/313<br><br />
<b>Comments:</b><br />
<blockquote><br />
The course covers at least two languages in each of the<br />
main paradigms (object-oriented, functional and logic programming),<br />
plus history, semantics and implementation issues.<br />
The Haskell section is about 2 weeks long and usually focusses on <br />
programming with higher-order functions and how that enables the<br />
language to be extended in application-specific ways<br />
(parser combinators, html-generation combinators etc.)<br />
</blockquote><br />
<br />
<b>Instructor:</b> [mailto:zeeshan@apiit.edu.pk M Zeeshan Ali Ansari],<br />
Asia Pacific Institute of Information Technology (Pakistan)<br><br />
<b>Course:</b> Advanced Programming Language Concepts<br><br />
<b>Student background:</b> Students having studied and worked on Imperative Programming Languages <br><br />
<b>Materials:</b> The Craft of Haskell, A Gentle Introduction to Haskell, Yet Another Haskell Tutorial.<br><br />
<b>Web page:</b> http://www.apiit.edu.pk<br><br />
<b>Comments:</b><br />
<blockquote><br />
This course compares and contrasts various programming language paradigms including Functional Programming. Out of 13 week course 5 to 6 of them are dedicated towards Haskell. The material is basically written in a way that enables imperative language programmers to understand the concepts and power of functional programming <br />
<br />
http://www.haskell.org/sitewiki/images/3/3d/Functional_Programming_Tutorial_By_Zeeshan_Ali_Ansari.doc<br />
<br />
<br />
</blockquote><br />
<br />
<b>Instructor:</b> John C. Mitchell,<br />
Stanford University<br><br />
<b>Course:</b> Programming Languages<br><br />
<b>Student background:</b> Some experience with Lisp/C/object-oriented languages.<br><br />
<b>Materials:</b> Concepts in Programming Languages (new Haskell chapters written with Kathleen Fisher)<br><br />
<b>Web page:</b> http://cs242.stanford.edu<br><br />
<b>Comments:</b><br />
<blockquote><br />
Central concepts in modern programming languages, impact on software development, language design trade-offs, and implementation considerations. Functional, imperative, and object-oriented paradigms. Formal semantic methods and program analysis. Modern type systems, higher order functions and closures, exceptions and continuations. Modularity, object-oriented languages, and concurrency. Runtime support for language features, interoperability, and security issues. <br />
</blockquote><br />
<br />
----<br />
<br />
== Advanced functional programming using Haskell ==<br />
<br />
These courses deal with the advanced issues such as semantics, type<br />
systems, or compilers. Includes a other advanced courses taught using<br />
Haskell. <br />
<br />
<b>Instructor:</b> [mailto:gmh@cs.nott.ac.uk Graham Hutton]<br />
School of Computer Science, University of Nottingham<br><br />
<b>Course:</b> Advanced Functional Programming<br><br />
<b>Student background:</b> At least one year of CS, including a course in Haskell<br><br />
<b>Materials:</b> Hugs; GHC; Graham Hutton, Programming in Haskell; own course material<br><br />
<b>Web page:</b> http://www.cs.nott.ac.uk/~gmh/afp.html<br />
<br />
<b>Instructor:</b> [mailto:rjmh@cs.chalmers.se John Hughes]<br />
Chalmers University, Gothenburg<br><br />
<b>Course:</b> Advanced Functional Programming<br><br />
<b>Student background:</b> General CS maturity; from this year most students have already used Haskell in introductory courses.<br><br />
<b>Materials:</b> Mainly hbc.; Papers (see web page)<br><br />
<b>Web page:</b> http://www.cs.chalmers.se/~rjmh/AFP<br><br />
<b>Comments:</b><br />
<blockquote><br />
The goal is to teach students how to solve substantial problems in a<br />
functional language --- `functional programming in anger', one might say. The<br />
emphasis is on design and use of suitable combinator libraries to simplify<br />
applications. Material covered includes monad design, use of CPS style,<br />
libraries for parsing, pretty-printing, and GUIs (presently fudgets). <br />
<br />
The course is taught in a `problem based' manner: lectures are few, while<br />
students solve three substantial programming problems during the term, with<br />
plenty of backup via group meetings. I adopted this teaching form three years<br />
ago, and it has led students to develop far better practical skills than most<br />
obtained from my earlier `lectures and exercises' courses, and I believe to<br />
use Haskell much more after the course's end.<br />
<br />
This course is optional in the third or fourth year, and is taken by a<br />
small-to-medium sized group of students.<br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:Olof.Johanssson@cs.umu.se Olof Johansson], Umeå Univesity, Department of Computing Science<br><br />
<b>Course:</b> Programming language semantics<br><br />
<b>Student background:</b> two terms of computer science studies and specificaly a course Programming language concepts<br><br />
<b>Materials:</b> Hugs and some HBC and GHC; Watt, Programming language, Syntax and Semantics<br><br />
<b>Web page:</b> http://www.cs.umu.se/local/kurser/TDBC05 (Only in swedish)<br> <br />
<br />
<br />
<b>Instructor:</b> [mailto:lyndon@cs.uwa.edu.au Lyndon While]<br />
The University of Western Australia<br><br />
<b>Course:</b> Functional Programming<br><br />
<b>Student background:</b> OOP, plus most of them have used Haskell previously<br><br />
<b>Materials:</b> hugs 98; none of the recent books really fit<br><br />
<b>Web page:</b> http://undergraduate.cs.uwa.edu.au/courses/230.301<br><br />
<b>Instructor:</b> [mailto:F.A.Rabhi@dcs.hull.ac.uk Fethi Rabhi],<br />
University of Hull (UK)<br><br />
<b>Course:</b> AI Problem Solving Techniques (using Haskell and Prolog)<br><br />
<b>Student background:</b> Haskell and Prolog programming<br><br />
<b>Materials:</b> HUGS; Thompson'96, own notes (soon to be published as a book).<br><br />
<b>Web page:</b> none<br><br />
<b>Comments:</b><br />
<blockquote><br />
It is very hard to justify learning Haskell unless it can be<br />
demonstrated in very practical situations (hence the provision<br />
of the above course).<br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:karczma@info.unicaen.fr Jerzy Karczmarczuk]<br />
University of Caen, Caen (France)<br> No links in the fr-Haskell page. Why not ?<br />
<b>Course:</b> Compilation<br><br />
<b>Student background:</b> General CS knowledge; students (should...) know Scheme and imperative languages, also some theory of languages and automata.<br><br />
<b>Materials:</b> <br />
Hugs, GHC, now also GHCi, and their documentation. Handouts: (still a little incomplete)<br />
Impossible to find the foolowing matterials.Files can not be found. <br />
* http://users.info.unicaen.fr/~karczma/matrs/Maitcomp/compilation_a.pdf<br />
* http://users.info.unicaen.fr/~karczma/matrs/Maitcomp/compilation_b.pdf<br />
* http://users.info.unicaen.fr/~karczma/matrs/Maitcomp/compilation_c.pdf<br />
<b>Comments:</b><br />
<blockquote><br />
This is a compulsory semestrial course in fourth year. Weekly: 1.5h<br />
course, 2.5H practice.<br />
One, but comprehensive assignment, taking 2 months or more.<br />
askell is our main coding tool. A little time is devoted by necessity<br />
to the language<br />
itself, but also from the perspective: "how would you compile such a<br />
language".<br />
"Standard stuff", such as parsing combinators, etc.is covered, but we<br />
don't begin with that.<br />
We start with the construction of small interpreters: from recursive<br />
Lisp-style to postfix,<br />
(Forth/PostScript style) constructing this last by partial evaluation<br />
(intuitively).<br />
We introduce control structures as lazy functions, operation<br />
sequencing through continuations,<br />
monads not only for parsing, but also for exceptions and<br />
non-determinism.<br />
We discuss (simply) the type inference. The code generator assembles a<br />
linear code by lazy<br />
concatenation of chunks which makes it trivial to deal with loops and<br />
cross-referencing<br />
fragments. Algorithms of garbage collection are presented (not<br />
implemented, though...) in<br />
a purely functional style.<br />
<br />
Students' opinion: "Frightening at first. Learning curve steep, but<br />
much less time spent on debugging, coding proficiency comes fast. Good for<br />
understanding what the compilation is about, but difficult to make a<br />
complete running program with all the I/O, etc.<br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:jeffm@cse.uconn.edu Jeffrey A. Meunier], University of Connecticut<br><br />
<b>Course:</b> CSE240 Intermediate Computer Systems<br><br />
<b>Student background:</b> computer/microprocessor organization<br />
<br><br />
<b>Materials:</b> Hugs (Feb 2001); Bird ``Introduction to Functional<br />
Programming''; Furber ``ARM System-on-Chip Architecture''<br />
<br><br />
<b>Web page:</b> http://www.engr.uconn.edu/~jeffm/Classes/CSE240-Spring-2001/index.html<br> <br />
<b>Comments:</b><br />
<blockquote><br />
This is a course in the low level programming of microprocessor systems.<br />
The course will focus on the development of an emulator (virtual<br />
machine, or VM) for a small computer system based on a modern RISC<br />
microprocessor (the ARM CPU) using a high level programming language<br />
(Haskell), and assembly language programming of the VM. Development of<br />
the VM will occur in stages, starting with the simple direct-execution<br />
(stream-based) model, gradually moving to a more realistic memory-mapped<br />
model, including exception handlers, concurrent processes, and<br />
asynchronous external devices.<br />
</blockquote><br />
<br />
<b>Instructor:</b> Gabriele Keller<br />
The University of New South Wales<br><br />
<b>Course:</b> Concepts of Programming Languages<br><br />
<b>Student background:</b> Most of them have used Haskell in first year<br><br />
<b>Materials:</b> GHC, TaPL and `Programming Languages: Theory and Practice', papers<br><br />
<b>Web page:</b> http://www.cse.unsw.edu.au/~cs3161<br><br />
<b>Last run:</b> 2006<br><br />
<b>Comments:</b><br />
<blockquote><br />
Expose students to a theory of programming languages based on type<br />
theory and operational semantics as a mathematically sound framework<br />
which allows us to investigate the properties of a large number of<br />
programming language features, including:<br />
<br />
* on semantics of different programming languages and programming paradigms: imperative, object oriented, and declarative.<br />
* theoretical foundations of programming languages: syntax, operatational, axiomatic and denotational semantics.<br />
* implementation aspects of central language features, such as dynamic and strong typing, polymorphism, overloading and automatic memory management<br />
<br />
Assignments are in GHC/Haskell, and in the past have included implementing a<br />
mini-Haskell type checker, type inference and interpreter.<br />
</blockquote><br />
<br />
<b>Instructor:</b> Manuel Chakravarty<br />
The University of New South Wales<br><br />
<b>Course:</b> Advanced Functional Programming<br><br />
<b>Student background:</b> Most of them have used Haskell in first year<br><br />
<b>Materials:</b> GHC, papers (see the website)<br><br />
<b>Web page:</b> http://www.cse.unsw.edu.au/~cs4132<br><br />
<b>Last run:</b>2004<br><br />
<b>Comments:</b><br />
<blockquote><br />
To provide students with an understanding of the theory and practice of<br />
the design, use, and implementation of functional programming languages,<br />
such as Haskell<br />
<br />
This includes selected topics from the following areas:<br />
<br />
* Foundations: lambda calculus, semantics, and type systems.<br />
* Design: side-effects, exceptions, concurrency, and parallelism.<br />
* Implementation: abstract machines, program transformation, and memory management. <br />
* Programming techniques: combinator libraries, monads, generic programming, and meta programming.<br />
* Applications: domain specific languages, graphics, web programming, reactive systems, and scientific programming.<br />
</blockquote><br />
<br />
[[Category:Community]]</div>Aivanhttps://wiki.haskell.org/index.php?title=Haskell_in_education&diff=55919Haskell in education2013-05-13T14:58:07Z<p>Aivan: /* Haskell as a second language */</p>
<hr />
<div>[[Category:Education]]<br />
This is a collection of material of interest to those teaching or<br />
taking courses that use Haskell. There is also a more general site,<br />
http://www.cs.kun.nl/fple/, devoted to all functional languages. The proceedings of the latest<br />
[http://www.informatik.uni-kiel.de/~mh/publications/reports/fdpe02/ International Workshop on Functional and Declarative Programming in Education (FDPE)] are now available.<br />
Some of the lecture notes and<br />
other course material found in these web pages are excellent<br />
supplements to the available text books.<br />
If you would like to use lecture<br />
notes, assignments, or other material found in these course web pages<br />
please contact the author for permission.<br />
<br />
Most of the entries are years old. When you add your own new<br />
material to this page, please also say when the course was run for the last time.<br />
<br />
The results of a survey of university courses using Haskell in the academic year 2005-2006 can be found [http://www.cs.chalmers.se/~rjmh/Wash/Survey/teaching.htm here]. Also, some news were added during the 2006-2007 academic year.<br />
<br />
== Suitable Course Textbooks ==<br />
<br />
See [[Books#Textbooks]].<br />
<br />
== Haskell as a first language ==<br />
<br />
These courses teach Haskell to students with no background in programming.<br />
<br />
<b>Instructor:</b> [http://homepages.inf.ed.ac.uk/wadler/ Philip Wadler] University of Edinburgh<br><br />
<b>Course:</b> [[Informatics 1 - Functional Programming]]<br><br />
<b>Materials:</b> GHCi, Emacs, Thompson: Haskell, the Craft of Functional Programming<br><br />
<b>Web page:</b> http://www.inf.ed.ac.uk/teaching/courses/inf1/fp/ <br><br />
<br />
<br />
<b>Instructor:</b> [mailto:page@ou.edu Rex Page] <br />
University of<br />
Oklahoma<br><br />
<b>Course:</b> Introduction to Computer Programming<br><br />
<b>Student background:</b> High-school mathematics<br><br />
<b>Materials:</b> Projects, Exams, Downloadable textbook: Rex Page, <br />
&quot;Two<br />
Dozen Short Lessons in Haskell&quot;<br><br />
<b>Web page:</b> http://www.cs.ou.edu/~rlpage/fpclassSpring97/<br />
<br />
<b>Comments:</b><br />
<blockquote><br />
These materials arose from a course offered for three consecutive<br />
semesters as<br />
an alternative to our usual first course in programming. Most of the<br />
students<br />
who took the course graduated in the past two years, and many of them<br />
cited it<br />
in the exit interview with the department chair as the most influential<br />
course<br />
in the entire academic career.<br />
<p>All materials for two offerings of the course are available through<br />
the web<br />
page. This includes individual projects, team projects, project<br />
solutions,<br />
exams, supplied software (connected with certain projects), tips for<br />
students<br />
taking the course, FAQs addressing questions that students asked during<br />
the<br />
semester, and a short textbook which served as the primary text in the<br />
course.</p><br />
<p>The first 10 to 11 weeks of the course use Haskell. Students are<br />
required to<br />
write nine programs in Haskell, three of which are team projects that<br />
combine<br />
software developed in individual projects. Different members of a team<br />
are<br />
assigned different individual projects, and the team efforts combine<br />
their<br />
solutions into a working piece of software.</p><br />
<p>In the early part of the course, students use operators like map,<br />
foldr, zip,<br />
and iterate to express computations. Explicit recursion is introduced<br />
after some<br />
experience with these common patterns of computation. Examples and<br />
problems<br />
address non-numeric applications, for the most part. Both interactive<br />
and file<br />
I/O are covered, but general purpose monads are not.</p><br />
<p>The last 5 to 6 weeks of the course use C, and most of the projects<br />
in that<br />
part of the course duplicate the function of earlier pieces of software<br />
that the<br />
students have written in Haskell.</p><br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:Jonathan.Hill@comlab.ox.ac.uk Jonathan Hill]<br />
Oxford University Computing Laboratory<br><br />
<b>Course:</b> Functional Programming for the Integrated Graduate Development Programme in Software Engineering at Oxford University.<br><br />
<b>Student background:</b> Discrete mathematics (the course is a part time MSc for people from industry; most are from IBM or Nortel).<br><br />
<b>Materials:</b> Gofer (an old version, with a stripped down prelude---no parameter classes!); Own course material<br><br />
<b>Web page:</b> http://www.comlab.ox.ac.uk/igdp/text/course06.html<br />
Note: Web pages not accessible. May be ... moved ? <br />
<br />
<br />
<b>Instructor:</b> [mailto:nxg@cs.nott.ac.uk Neil Ghani]<br />
School of Computer Science, University of Nottingham<br><br />
<b>Course:</b> Functional Programming<br><br />
<b>Student background:</b> None<br><br />
<b>Materials:</b> Hugs; Graham Hutton, Programming in Haskell; own lecture slides<br><br />
<b>Web page:</b> http://www.cs.nott.ac.uk/~nxg/G51FUN06/fun.html<br />
<br />
<b>Instructor:</b> [mailto:prins@cs.unc.edu" Jan Prins]<br />
UNC Chapel Hill<br><br />
<b>Course:</b> Introduction to Functional Programming<br><br />
<b>Student background:</b> solid background in high-school science and mathematics<br><br />
<b>Materials:</b> Hugs 1.4 incl. Active Haskell, FRAN and [[Haskore]]; Simon Thompson, "Haskell: The Art of Functional Programming"<br><br />
<b>Web page:</b> http://www.cs.unc.edu/~prins/Classes/15/<br><br />
<b>Comments:</b><br />
<blockquote><br />
(Introductory programming course for CS and math/science majors, typically Freshman and Sophomores. Class size ~60)<br />
<br />
Our undergraduate computing environment is now largely<br />
PCs running Windows NT. We use NTEmacs as the programming<br />
environment with a slightly modified version of Emacs hugs<br />
mode with hugs running as a subprocess. The combined<br />
hugs/NTEmacs/Active Haskell distribution (available through<br />
course home page) is installed on 400+ public Win NT machines<br />
on campus and some unknown number of student-owned Win 95/98<br />
machines.<br />
<br />
This arrangement is new this semester, but so far has been<br />
working well. Keystroke-oriented interactive applications<br />
may be problematic with hugs running in NTEmacs shell mode.<br />
<br />
I'm planning assignments using Fran and Active Haskell and<br />
will try teaching the "brief introduction to imperative<br />
programming" at the end of the class using monads. I would<br />
be interested in talking with anyone who has experience or<br />
suggestions along these lines.<br />
<br />
I took a cue from Paul Hudak and others and have occasional<br />
appearances of MS Agents during lectures to wake students up!<br />
<br />
This is my first time teaching this course, and I would<br />
enjoy talking to others teaching at a similar level. A<br />
cursory search on the web didn't reveal many courses<br />
in this category.<br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:dave@cs.chalmers.se David Sands]<br />
University of Gothenburg & Chalmers University of Technology<br><br />
<b>Course:</b> Programmering för Naturvetare<br><br />
<b>Student background:</b> New students<br><br />
<b>Materials:</b> hugs 1.4; Simon Thompson<br><br />
<b>Web page:</b> http://www.md.chalmers.se/Cs/Grundutb/Kurser/nptah/<br><br />
<b>Comments:</b><br />
<blockquote><br />
This is the first part of a first course in programming. About 16<br />
lectures, each 2x45 mins plus weekly exercise classes and three<br />
assessed programming exercises. Most of my materials are in English.<br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:M.A.Rodrigues@dcs.hull.ac.uk Marcos A Rodrigues]<br />
The University of Hull, Hull, UK<br><br />
<b>Course:</b> Functional and Logic Programming<br><br />
<b>Student background:</b> none<br><br />
<b>Materials:</b> hugs 1.4; Haskell: the Craft of Functional Programming. Thompson S., Addison Wesley, 1996.<br><br />
<br />
<b>Instructor:</b> [mailto:Torsten.Grust@uni-konstanz.de Torsten Grust]<br />
University of Konstanz (Germany)<br> <br />
<b>Course:</b> Deklarative Programmierung (Declarative Programming, in german)<br><br />
<b>Student background:</b> basic math, no programming background required<br><br />
<b>Materials:</b> Hugs 1.4; (~300) slides available from the course web page;<br />
Jeroen Fokker's classroom text: Functional Programming<br />
http://www.cs.uu.nl/~jeroen/courses/fp-eng.ps.gz</a>;<br />
Richard Bird, Phil Wadler: Introduction to Functional Programming; Simon Peyton-Jones: Implementation of Functional Programming Languages<br><br />
<b>Web page:</b> http://www.fmi.uni-konstanz.de/dbis/Courses-old/Courses-ss98/decl-ss98.html<br><br />
<b>Comments:</b><br />
<blockquote><br />
The course is in German only (sorry about that). It additionally<br />
features an introduction to logical programming and Prolog.<br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:richardb@cse.unsw.edu.au Richard Buckland]<br />
University of New South Wales<br><br />
<b>Course:</b> Computing 1A<br><br />
<b>Student background:</b> Mixed, some have no computing<br />
background. This is our cs1 subject.<br><br />
<b>Materials:</b> Hugs 1.4; Simon Thompson<br><br />
<b>Web page:</b> http://www.cse.unsw.edu.au/~cs1011<br><br />
<br />
<br />
<b>Instructor:</b> [mailto:robert@techfak.uni-bielefeld Robert Giegerich], Stefan Posch, University Bielefeld, Germany<br><br />
<b>Course:</b> Introduction to Computer Science<br><br />
<b>Student background:</b> Completed High School (Abitur)<br><br />
<b>Materials:</b> Hugs; Class Notes by Robert Giegerich and Ralf Hinze<br><br />
<b>Comments:</b><br />
<blockquote><br />
Our first semester course<br />
uses Haskell as a vehicle to fundamental aspects of computation:<br />
algorithmics, specification and verification, efficiency analysis,<br />
programming methods. This works wonderfully. We do not require previous<br />
or additional programming experience. Haskell is quickly learned, <br />
to the necessary degreee; we make no attempt to cover the full language.<br />
This is NOT a Haskell course! Haskell allows us to speak about concepts<br />
of computer science WITHOUT a lot of language learning. And Haskell<br />
even helps to keep out detrimental habits from previous programming<br />
experience, as well as motivational problems resulting from the widely<br />
differing previous experiences of our incoming students.<br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:hj@sm.luth.se Håkan Jonsson] Luleå University of Technology, Sweden<br><br />
<b>Course:</b> SMD001, functional programming<br><br />
<b>Student background:</b> <br />
None. This is the very first programming course <br />
our students take.<br><br />
<b>Materials:</b> <br />
Materials: Simon Thompson's Haskell book + 7 laboratory/programming <br />
assignments using Hugs.<br />
<br><br />
<b>Web page:</b>http://www.sm.luth.se/csee/courses/smd/001/ (mostly Swedish)<br> <br />
<br />
<br />
<b>Instructor:</b> [mailto:Clem.Baker-Finch@cs.anu.edu.au Clem Baker-Finch, Australian National University<br><br />
<b>Course:</b>Introduction to Programming and Algorithms<br><br />
<b>Student background:</b> No programming background was<br />
assumed.<br />
<br><br />
<b>Materials:</b> GHC, GHCi, Simon Thompson 1st ed., my own materials. <br />
<br><br />
<b>Web page:</b> http://cs.anu.edu.au/Student/comp1100/<br> <br />
<b>Comments:</b><br />
<blockquote><br />
The first 75% of the course is basic programming concepts using Haskell. The remainder covers the same concepts in Java. This is reinforced - hopefully - by the third assignment (in Java) being the same as the first assignment (in Haskell). The aim is to provide a managed transition to the course which follows in second semester. Another point of possible interest is the use of a simple graphics library, ANUPlot, built on top of the OpenGL binding. See http://code.google.com/p/anuplot/<br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:lyndon@cs.uwa.edu.au Lyndon While] The University of Western Australia<br><br />
<b>Course:</b> Foundations of Computer Science<br><br />
<b>Student background:</b> None<br><br />
<b>Materials:</b> hugs 98; Thompson.<br><br />
<b>Web page:</b> http://undergraduate.cs.uwa.edu.au/courses/230.123<br><br />
<br />
<br />
<b>Instructor:</b> [http://www.cs.us.es/~jalonso José A. Alonso Jiménez] Dept of Computer Science and A.I., University of Seville, Spain<br><br />
<b>Course:</b> Informatics (Inform&aacute;tica, in spanish)<br><br />
<b>Student background:</b> None. This is the very first programming course <br />
our students take.<br><br />
<b>Materials:</b> GHCi, Emacs, Graham Hutton: &quot;Programming in Haskell&quot;, Slides, Exercises, Exams <br><br />
<b>Web page:</b> http://www.cs.us.es/~jalonso/cursos/i1m (in spanish)<br><br />
<b>First run:</b> 2009–2010<br><br />
<b>Last run:</b> 2012–2013<br />
<br />
----<br />
<br />
== Haskell as a second language ==<br />
<br />
These courses teach Haskell to students that have already learned<br />
another language.<br />
<br />
<b>Instructor:</b> [mailto:page@ou.edu Rex Page]<br />
University of Oklahoma<br><br />
<b>Course:</b> Discrete Mathematics<br><br />
<b>Student background:</b> High-school mathematics, introductory programming<br />
course (any language)<br><br />
<b>Materials:</b> Lecture notes, Projects, Exams, Solutions, Proof checking<br />
tools, etc.; text: Hall and O'Donnell, &quot;Discrete Mathematics with a<br />
Computer&quot;<br><br />
<br />
<b>Web page:</b> http://www.cs.ou.edu/~beseme/<br><br />
<b>Comments:</b><br />
<blockquote><br />
Lecture notes comprise over 350 animated slides (all both PowerPoint and<br />
PDF<br />
formats). About two-thirds of the material centers around mathematical logic.<br />
After the introduction of predicates, all of the examples in the logic<br />
portion<br />
of the course involve reasoning about properties of software, most of which is<br />
expressed in Haskell (a few are conventional looping functions).<br />
<p>Software examples include sum, sequence concatenation, logical operations on<br />
sequences, the Russian peasant algorithm, insertion and lookup in AVL <br />
trees, and<br />
other computations. Most of the properties verified relate to aspects of <br />
program<br />
correctness, but resource utilization properties are also verified in <br />
some<br />
cases. Several semesters worth of exams (finals and exams given during <br />
the term)<br />
are provided. The slides have matured through several offerings of the course.</p><br />
<p>The remaining third of the course discusses other standard topics<br />
in discrete<br />
mathematics, such as sets, functions, relations, trees, and counting.<br />
The web<br />
page provides access to a preview of the material. Exams and solutions are<br />
protected by a login procedure (to increase the comfort level of<br />
instructors<br />
wishing to use them in courses). The web page provides a link through<br />
which<br />
instructors may gain access to the full website.</p><br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:labra@lsi.uniovi.es Jose Emilio Labra Gayo],<br />
Dept. of Computer Science (EUITIO) University of Oviedo<br><br />
<b>Course:</b> Logic and Functional Programming<br><br />
<b>Student background:</b> The course is oriented towards third year undergraduate students in computer science. Usually, the students have been<br />
introduced to imperative languages like Pascal and Object <br />
Oriented Languages like C++<br><br />
<b>Materials:</b> Hugs; R. Bird "Introd. to FP using Haskell" (2nd Ed), J. E. Labra Gayo. "Introduction to the Haskell Language" (in spanish).<br><br />
<b>Web page:</b> http://lsi.uniovi.es/~labra/plf.html (in spanish).<br />
My FP page: http://lsi.uniovi.es/~labra/FuncProg.html<br><br />
<br />
<br />
<b>Instructor:</b> [mailto:fruehr@willamette.edu Fritz Ruehr]<br />
Willamette University, Salem, Oregon, USA (a small Liberal Arts College, about 1 hour from Portland & OGI)<br><br />
<b>Course:</b> CS 451 Topics in Computer Science: Functional Programming<br><br />
<b>Student background:</b> Data structures (I may also have required discrete math)<br><br />
<b>Materials:</b> Hugs 1.4 beta (I also taught Scheme); Haskell: The Craft of Functional Programming by Simon Thompson (I also used my own on-line lecture notes and labs and Kent Dybvig's text on Scheme)<br><br />
<b>Web page:</b> http://www.willamette.edu/~fruehr/451/<br><br />
<b>Comments:</b><br />
<blockquote><br />
The notes and labs I have on-line are in pretty rough form: many slide <br />
points are just one-line topical stubs I used as reminders in lecture.<br />
Many of the on-line materials are not linked into the (out of date)<br />
home page.<br />
<br />
I hope to have the course approved for next Fall as a regular offering<br />
(i.e., not as a "special topic") and should have more extensive<br />
on-line materials up by then.<br />
<br />
Teaching "bi-lingually" in Haskell and Scheme seemed like a good idea<br />
at the time, but next time around I will use Haskell as the main vehicle,<br />
perhaps taking some time near the end of the course to highlight some<br />
other languages (Scheme, ML, Clean).<br />
<br />
Some of my students used Conal Elliot's Fran and Paul Hudak's Haskore<br />
and liked them a lot; I was nice to have some significantly-sized<br />
applications that seemed more practical and fun to show off at the end<br />
of the course (I should have demonstrated these things at the beginning<br />
of the course to help with motivation). Next time around I would like to<br />
have a "beginner's prelude" or similar available to avoid problems with<br />
classes in type inference, Int vs. Integer, etc. These problems were a<br />
constant annoyance during lectures.<br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:J.Hamer@cs.auckland.ac.nz John Hamer],<br />
University of Auckland<br><br />
<b>Course:</b> Logic and Functional Programming<br><br />
<b>Student background:</b> Year 2 programming + some discrete maths<br><br />
<b>Materials:</b> Hugs 98, Haskell School of Expression, Page "Two Dozen Short Lessons in Haskell",<br><br />
<b>Web page:</b> http://www.cs.auckland.ac.nz/compsci360fc<br><br />
<br />
<br />
<b>Instructor:</b> [mailto:lengauer@fmi.uni-passau.de Chris Lengauer]<br />
University of Passau<br><br />
<b>Course:</b> Functional Programming<br><br />
<b>Student background:</b> two years of CS study<br><br />
<b>Materials:</b> hugs; Richard Bird's new text (PHI)<br><br />
<b>Web page:</b> not reachable from outside Passau<br><br />
<br />
<br />
<b>Instructor:</b> [mailto:cunningham@cs.olemiss.edu Conrad Cunningham]<br />
University of Mississippi<br><br />
<b>Course:</b> Functional Programming<br><br />
<b>Student background:</b> official -- senior or graduate standing; actual -- introductory programming, data structures, and discrete math<br><br />
<b>Materials:</b> Hugs on Unix and MS Windows systems;<br />
Mostly use the instructor's own set of lecture notes. Also Simon Thompson's HASKELL: THE CRAFT OF FUNCTIONAL PROGRAMMING. Previously used the Bird and Wadler textbook<br><br />
<b>Web page:</b> http://www.cs.olemiss.edu/~hcc/csci555/<br><br />
<b>Comments:</b><br />
<blockquote><br />
Although I am not a researcher in FP, I enjoy teaching the FP course.<br />
Most of the students take to the course after a few weeks. Hugs works<br />
reasonably well, but, of course, more pedagogically oriented error messages<br />
and other support tools would be helpful.<br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:leavens@cs.iastate.edu Gary T. Leavens],<br />
Iowa State University<br><br />
<b>Course:</b> Programming Languages 1<br><br />
<b>Student background:</b> undergraduate course in compilers or programming languaages<br><br />
<b>Materials:</b> Hugs 1.4; Thompson's Haskell: The Craft of Programming<br><br />
<b>Web page:</b> http://www.cs.iastate.edu/~leavens/ComS541.html<br><br />
<b>Comments:</b><br />
<blockquote><br />
Be sure to tell your students how to debug programs.<br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:jtod@dcs.gla.ac.uk John O'Donnell]<br />
University of Glasgow<br><br />
<b>Course:</b> Functional Programming<br><br />
<b>Student background:</b> Programming (in Ada), Algorithmic Foundations<br><br />
<b>Materials:</b> Hugs; Simon Thompson's book on Haskell<br><br />
<b>Web page:</b> http://www.dcs.gla.ac.uk/courses/teaching/level2/modules/#FP2<br><br />
<br />
<b>Instructor:</b> [mailto:chitil@informatik.rwth-aachen.de Olaf Chitil],<br />
RWTH Aachen, Germany<br><br />
<b>Course:</b> Functional Programming in Haskell<br><br />
<b>Student background:</b> basic programming skills (not necessarily in a<br />
functional language)<br><br />
<b>Materials:</b> Hugs 1.4; Hugs user manual, slide copies;<br />
additionally the `Gentle Introduction to Haskell', probably Bird's `Introduction<br />
to Functional Programming using Haskell' in the future.<br><br />
<b>Web page:</b> http://www-i2.informatik.rwth-aachen.de/Praktikum/SWP/ (in German)<br><br />
<b>Comments:</b><br />
<blockquote><br />
The course starts with 4 full time days of learning Haskell. During the semester<br />
the students (in groups of 2 students) have to implement a compiler and an<br />
abstract machine for a simple imperative language. They are given parts of the<br />
system and a manual on how to do the remaining parts (they have no prior<br />
knowledge on compiler construction).<br />
The most difficult construct for students to understand is the monad. I<br />
introduce IO without mentioning monads. Later I explain how to build a simple<br />
exception handling system based on the type `Maybe a' / `Error a'. Only<br />
subsequently I give the general definition of monads and present the list monad<br />
and a simple state monad. However, I fear that just to understand the bind<br />
operator `>>=' requires people to be quite comfortable with higher-order<br />
functions.<br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [http://web.comlab.ox.ac.uk/oucl/people/richard.bird.html Richard Bird], Oxford Brookes University<br><br />
<b>Course:</b> Functional Programming<br><br />
<b>Student background:</b> Elementary structured programming<br><br />
<b>Web page:</b> http://web.comlab.ox.ac.uk/oucl/courses/topics00-01/fp/<br><br />
<br />
<br />
<b>Instructor:</b> [mailto:paul.hudak@yale.edu Paul Hudak],<br />
Yale University, Dept of Computer Science<br><br />
<b>Course:</b> Functional Programming<br><br />
<b>Student background:</b> at least one programming course<br><br />
<b>Materials:</b> Hugs; my own textbook, which is under preparation<br><br />
<b>Web page:</b> none<br><br />
<br />
<br />
<b>Instructor:</b> [mailto:abf@cs.ucc.ie Alex Ferguson]<br />
University College Cork<br><br />
<b>Course:</b> Functional and Logic Programming<br><br />
<b>Student background:</b> Final year undergraduate<br />
<br><br />
<b>Materials:</b> Final year undergraduate<br />
Materials: Hugs 98; ghc; Simon Thompson, "Haskell: The Craft of<br />
Functional Programming" (2nd ed.)<br />
<br><br />
<b>Web page:</b> http://yeats.ucc.ie/~abf/CS4001/<br> <br />
<b>Comments:</b><br />
<blockquote><br />
This is the declarative programming option for 4th year<br />
undergrads, who have Java as a first programming language, and some<br />
knowledge of C and C++. The current final year have had some exposure<br />
to Haskell in first year, though this is no longer the case for our<br />
current intake.<br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:lky@nada.kth.se Leif Kusoffsky],<br />
Royal Institute of Technology, Stockholm<br><br />
<b>Course:</b> Functional Programming 2D1370<br><br />
<b>Student background:</b> The course is oriented towards third year<br />
undergraduate students in computer science. The students<br />
have been introduced to imperative languages like<br />
C and Object Oriented Languages like Java<br />
<br><br />
<b>Materials:</b> Hugs; Hudak : The Haskell School of Expression<br />
<br><br />
<br />
<br />
<b>Instructor:</b> Jeremy Bobbio -- INSIA<br><br />
<b>Course:</b> Functional and Logic Programming<br><br />
<b>Student background:</b> One year CS<br />
<br><br />
<b>Materials:</b> <br />
Hugs, GHC, Paul Hudak's Haskell School of Education<br />
<br><br />
<b>Web page:</b> http://etudiants.insia.org/~jbobbio/pafp/ (french)<br> <br />
<br />
<br />
<b>Instructor:</b> [mailto:antkaij@mit.jyu.fi Antti-Juhani Kaijanaho]<br />
University of Jyväskylä<br><br />
<b>Course:</b> Functional Programming 1 & 2<br><br />
<b>Student background:</b> third-year undergraduate and up<br />
<br><br />
<b>Materials:</b><br />
GHC, Gtk2HS<br />
<br><br />
<b>Web page:</b> [http://www.mit.jyu.fi/antkaij/opetus/fo/2005-2006/index.en.html]<br />
<br><br />
<b>Last run:</b> 2005&ndash;2006<br />
<br><br />
<!--<b>Comments:</b><br />
<blockquote><br />
(I'll write this later)<br />
</blockquote>--><br />
<br />
<b>Instructor:</b> [mailto:djd@comp.leeds.ac.uk David Duke]<br />
University of Leeds, School of Computing<br><br />
<b>Course:</b> Functional Programming<br><br />
<b>Student background:</b> Second and third year undergraduate<br />
<br><br />
<b>Materials:</b> ghc; Graham Hutton "Programming in Haskell"<br />
<br><br />
<b>Web page:</b> www.comp.leeds.ac.uk/se23/<br> <br />
<b>Comments:</b><br />
<blockquote><br />
This is an optional course that students currently can take in <br />
second or third year (from 2008/9 it will be third-years only).<br />
Students will have previously used Python and Java.<br />
Although the emphasis is on learning to solve problems within<br />
the functional paradigm, and how to develop solutions within<br />
Haskell, I also like to show students what is "under the<br />
bonnet" and conclude the module with an introduction to<br />
implementation issues, using material derived from<br />
"Implementing Functional Languages" by Simon Peyton Jones and <br />
David Lester. <br />
</blockquote><br />
<br />
<b>Instructor:</b> [mailto:popavdan@yahoo.com Popa V. Dan]<br />
University of Bacau, Romania <br><br />
<b>Course:</b> "Limbaje formale si automate" (Formal languages and automata) <br><br />
<b>Student background:</b> second-year undergraduate <br />
<br><br />
<b>Materials:</b> Hugs 98 (2002 revised version) included in Mandriva (Formely Mandrake) 10.0 Linux Distribution<br />
<br><br />
<b>Web page:</b> Not yet. Try the page of the "ro" community on www.haskell.org<br />
<br> [http://www.haskell.org/haskellwiki/Ro/Haskell Ro/Haskell webpage is here] <br><br />
<b>First run:</b> 2006&ndash;2007<br />
<br><br />
<br />
Haskell is used as an implementation languages in student's laboratories.<br />
The ideea was to provide a language powerfull enough to be able to express <br />
how to build a parser starting from a grammmar. The students are able<br />
to build small (monadic) interpreters for "while-languages" using a <br />
recommanded monad and a recommanded back-end. The labs are focusing on the <br />
grammar of the languages, on the modular (monadic) parsing as a tool for <br />
verifying and processing inputs which are not validable by finite state <br />
automata but by context free grammmars. Adaptability of the language, <br />
especially obtained manipulating and improving syntax is also a target.<br />
<br />
Support (concerning Haskell): "O introducere in Haskell prin exemple" by<br />
Dan Popa, published in january 31,2007 by <br />
[http://www.edusoft.ro Edusoft](in romanian) Contact the author if needed .<br />
<br />
Other recommanded books: "Gentle Introd to Haskell 98" and YAHT <br />
Recomanded papers: All about monadic parsing. <br />
Special message for Graham Hutton, Erik Meijer and P. Wadler and all <br />
other authors with similar interests from the Haskell <br />
community:<br />
<br />
Thank you very much for your papers concerning Monadic parsing and <br />
interpreters ! <br />
<br />
'''Instructors:''' National and Technological University, Buenos Aires, Argentina (Universidad Tecnológica Nacional - Facultad Regional Buenos Aires)<br><br />
'''Course:''' Programming Paradigms <br><br />
'''Student background:''' This is a second-year undergraduate course. Students have already been introduced to basic structured programming concepts <br><br />
<br />
----<br />
<br />
== Comparative programming languages ==<br />
<br />
These courses teach general programming language principles, with<br />
Haskell as an example of a functional language.<br />
<br />
<b>Instructor: </b> Ruediger Marcus Flaig, University of Heidelberg (Germany)<br />
<br><br />
<b>Course:</b> An introduction to programming in bioinformatics <br><br />
<b>Student background:</b> different, but generally low<br><br />
<b>Materials:</b> Hugs-98 and lots of other stuff<br />
<br><br />
<b>Web page:</b> http://www.sanctacaris.net/rc.html<br> <br />
<b>Comments:</b><br />
<blockquote><br />
This course is designed to introduce life science students,<br />
that is to say, going-to-be biologists, physicians, biotechnologists<br />
and maybe others, to solving real-life problems (such as DNA sequence<br />
handling and analysis). Emphasis will be on paradigms (imperative /<br />
OO, functional, declarative). Although -- in order not to frighten<br />
people -- the official announcement mentions only Python, Haskell will<br />
be presented as THE purely functional language, and all solutions may<br />
be presented in either Python, Haskell or Java. I am very curious<br />
about the feedback I'll get, and maybe next term we shall focus more<br />
on Haskell. What I'd really need, though, is some life science related<br />
package for Haskell, such as BIOPYTHON and BIORUBY. <br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:ham@cs.utexas.edu Hamilton Richards],<br />
University of Texas (Austin)<br><br />
<b>Course:</b> Programming Languages (taught in 2005)<br><br />
<b>Student background:</b> <br><br />
<b>Materials:</b> Hugs 1.4; Sethi, Davie.<br><br />
<b>Web page:</b> http://www.cs.utexas.edu/users/ham/UTCS/CS345/<br><br />
<b>Comments:</b><br />
<blockquote><br />
I'm using Haskell in a programming-languages course, but it's distributed<br />
somewhat piecemeal through the course. Probably adds up to something like<br />
3-4 weeks (out of 15).<br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [http://www.cs.waikato.ac.nz/~marku Mark Utting]<br />
University of Waikato (New Zealand)<br />
<b>Course:</b> Programming Languages<br><br />
<b>Student background:</b> Two years of C++ and 1 year of Haskell<br><br />
<b>Materials:</b> Textbook "Programming Languages", Louden.<br />
<b>Web page:</b> http://www.cs.waikato.ac.nz/~marku/313<br><br />
<b>Comments:</b><br />
<blockquote><br />
The course covers at least two languages in each of the<br />
main paradigms (object-oriented, functional and logic programming),<br />
plus history, semantics and implementation issues.<br />
The Haskell section is about 2 weeks long and usually focusses on <br />
programming with higher-order functions and how that enables the<br />
language to be extended in application-specific ways<br />
(parser combinators, html-generation combinators etc.)<br />
</blockquote><br />
<br />
<b>Instructor:</b> [mailto:zeeshan@apiit.edu.pk M Zeeshan Ali Ansari],<br />
Asia Pacific Institute of Information Technology (Pakistan)<br><br />
<b>Course:</b> Advanced Programming Language Concepts<br><br />
<b>Student background:</b> Students having studied and worked on Imperative Programming Languages <br><br />
<b>Materials:</b> The Craft of Haskell, A Gentle Introduction to Haskell, Yet Another Haskell Tutorial.<br><br />
<b>Web page:</b> http://www.apiit.edu.pk<br><br />
<b>Comments:</b><br />
<blockquote><br />
This course compares and contrasts various programming language paradigms including Functional Programming. Out of 13 week course 5 to 6 of them are dedicated towards Haskell. The material is basically written in a way that enables imperative language programmers to understand the concepts and power of functional programming <br />
<br />
http://www.haskell.org/sitewiki/images/3/3d/Functional_Programming_Tutorial_By_Zeeshan_Ali_Ansari.doc<br />
<br />
<br />
</blockquote><br />
<br />
<b>Instructor:</b> John C. Mitchell,<br />
Stanford University<br><br />
<b>Course:</b> Programming Languages<br><br />
<b>Student background:</b> Some experience with Lisp/C/object-oriented languages.<br><br />
<b>Materials:</b> Concepts in Programming Languages (new Haskell chapters written with Kathleen Fisher)<br><br />
<b>Web page:</b> http://cs242.stanford.edu<br><br />
<b>Comments:</b><br />
<blockquote><br />
Central concepts in modern programming languages, impact on software development, language design trade-offs, and implementation considerations. Functional, imperative, and object-oriented paradigms. Formal semantic methods and program analysis. Modern type systems, higher order functions and closures, exceptions and continuations. Modularity, object-oriented languages, and concurrency. Runtime support for language features, interoperability, and security issues. <br />
</blockquote><br />
<br />
----<br />
<br />
== Advanced functional programming using Haskell ==<br />
<br />
These courses deal with the advanced issues such as semantics, type<br />
systems, or compilers. Includes a other advanced courses taught using<br />
Haskell. <br />
<br />
<b>Instructor:</b> [mailto:gmh@cs.nott.ac.uk Graham Hutton]<br />
School of Computer Science, University of Nottingham<br><br />
<b>Course:</b> Advanced Functional Programming<br><br />
<b>Student background:</b> At least one year of CS, including a course in Haskell<br><br />
<b>Materials:</b> Hugs; GHC; Graham Hutton, Programming in Haskell; own course material<br><br />
<b>Web page:</b> http://www.cs.nott.ac.uk/~gmh/afp.html<br />
<br />
<b>Instructor:</b> [mailto:rjmh@cs.chalmers.se John Hughes]<br />
Chalmers University, Gothenburg<br><br />
<b>Course:</b> Advanced Functional Programming<br><br />
<b>Student background:</b> General CS maturity; from this year most students have already used Haskell in introductory courses.<br><br />
<b>Materials:</b> Mainly hbc.; Papers (see web page)<br><br />
<b>Web page:</b> http://www.cs.chalmers.se/~rjmh/AFP<br><br />
<b>Comments:</b><br />
<blockquote><br />
The goal is to teach students how to solve substantial problems in a<br />
functional language --- `functional programming in anger', one might say. The<br />
emphasis is on design and use of suitable combinator libraries to simplify<br />
applications. Material covered includes monad design, use of CPS style,<br />
libraries for parsing, pretty-printing, and GUIs (presently fudgets). <br />
<br />
The course is taught in a `problem based' manner: lectures are few, while<br />
students solve three substantial programming problems during the term, with<br />
plenty of backup via group meetings. I adopted this teaching form three years<br />
ago, and it has led students to develop far better practical skills than most<br />
obtained from my earlier `lectures and exercises' courses, and I believe to<br />
use Haskell much more after the course's end.<br />
<br />
This course is optional in the third or fourth year, and is taken by a<br />
small-to-medium sized group of students.<br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:Olof.Johanssson@cs.umu.se Olof Johansson], Umeå Univesity, Department of Computing Science<br><br />
<b>Course:</b> Programming language semantics<br><br />
<b>Student background:</b> two terms of computer science studies and specificaly a course Programming language concepts<br><br />
<b>Materials:</b> Hugs and some HBC and GHC; Watt, Programming language, Syntax and Semantics<br><br />
<b>Web page:</b> http://www.cs.umu.se/local/kurser/TDBC05 (Only in swedish)<br> <br />
<br />
<br />
<b>Instructor:</b> [mailto:lyndon@cs.uwa.edu.au Lyndon While]<br />
The University of Western Australia<br><br />
<b>Course:</b> Functional Programming<br><br />
<b>Student background:</b> OOP, plus most of them have used Haskell previously<br><br />
<b>Materials:</b> hugs 98; none of the recent books really fit<br><br />
<b>Web page:</b> http://undergraduate.cs.uwa.edu.au/courses/230.301<br><br />
<b>Instructor:</b> [mailto:F.A.Rabhi@dcs.hull.ac.uk Fethi Rabhi],<br />
University of Hull (UK)<br><br />
<b>Course:</b> AI Problem Solving Techniques (using Haskell and Prolog)<br><br />
<b>Student background:</b> Haskell and Prolog programming<br><br />
<b>Materials:</b> HUGS; Thompson'96, own notes (soon to be published as a book).<br><br />
<b>Web page:</b> none<br><br />
<b>Comments:</b><br />
<blockquote><br />
It is very hard to justify learning Haskell unless it can be<br />
demonstrated in very practical situations (hence the provision<br />
of the above course).<br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:karczma@info.unicaen.fr Jerzy Karczmarczuk]<br />
University of Caen, Caen (France)<br> No links in the fr-Haskell page. Why not ?<br />
<b>Course:</b> Compilation<br><br />
<b>Student background:</b> General CS knowledge; students (should...) know Scheme and imperative languages, also some theory of languages and automata.<br><br />
<b>Materials:</b> <br />
Hugs, GHC, now also GHCi, and their documentation. Handouts: (still a little incomplete)<br />
Impossible to find the foolowing matterials.Files can not be found. <br />
* http://users.info.unicaen.fr/~karczma/matrs/Maitcomp/compilation_a.pdf<br />
* http://users.info.unicaen.fr/~karczma/matrs/Maitcomp/compilation_b.pdf<br />
* http://users.info.unicaen.fr/~karczma/matrs/Maitcomp/compilation_c.pdf<br />
<b>Comments:</b><br />
<blockquote><br />
This is a compulsory semestrial course in fourth year. Weekly: 1.5h<br />
course, 2.5H practice.<br />
One, but comprehensive assignment, taking 2 months or more.<br />
askell is our main coding tool. A little time is devoted by necessity<br />
to the language<br />
itself, but also from the perspective: "how would you compile such a<br />
language".<br />
"Standard stuff", such as parsing combinators, etc.is covered, but we<br />
don't begin with that.<br />
We start with the construction of small interpreters: from recursive<br />
Lisp-style to postfix,<br />
(Forth/PostScript style) constructing this last by partial evaluation<br />
(intuitively).<br />
We introduce control structures as lazy functions, operation<br />
sequencing through continuations,<br />
monads not only for parsing, but also for exceptions and<br />
non-determinism.<br />
We discuss (simply) the type inference. The code generator assembles a<br />
linear code by lazy<br />
concatenation of chunks which makes it trivial to deal with loops and<br />
cross-referencing<br />
fragments. Algorithms of garbage collection are presented (not<br />
implemented, though...) in<br />
a purely functional style.<br />
<br />
Students' opinion: "Frightening at first. Learning curve steep, but<br />
much less time spent on debugging, coding proficiency comes fast. Good for<br />
understanding what the compilation is about, but difficult to make a<br />
complete running program with all the I/O, etc.<br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:jeffm@cse.uconn.edu Jeffrey A. Meunier], University of Connecticut<br><br />
<b>Course:</b> CSE240 Intermediate Computer Systems<br><br />
<b>Student background:</b> computer/microprocessor organization<br />
<br><br />
<b>Materials:</b> Hugs (Feb 2001); Bird ``Introduction to Functional<br />
Programming''; Furber ``ARM System-on-Chip Architecture''<br />
<br><br />
<b>Web page:</b> http://www.engr.uconn.edu/~jeffm/Classes/CSE240-Spring-2001/index.html<br> <br />
<b>Comments:</b><br />
<blockquote><br />
This is a course in the low level programming of microprocessor systems.<br />
The course will focus on the development of an emulator (virtual<br />
machine, or VM) for a small computer system based on a modern RISC<br />
microprocessor (the ARM CPU) using a high level programming language<br />
(Haskell), and assembly language programming of the VM. Development of<br />
the VM will occur in stages, starting with the simple direct-execution<br />
(stream-based) model, gradually moving to a more realistic memory-mapped<br />
model, including exception handlers, concurrent processes, and<br />
asynchronous external devices.<br />
</blockquote><br />
<br />
<b>Instructor:</b> Gabriele Keller<br />
The University of New South Wales<br><br />
<b>Course:</b> Concepts of Programming Languages<br><br />
<b>Student background:</b> Most of them have used Haskell in first year<br><br />
<b>Materials:</b> GHC, TaPL and `Programming Languages: Theory and Practice', papers<br><br />
<b>Web page:</b> http://www.cse.unsw.edu.au/~cs3161<br><br />
<b>Last run:</b> 2006<br><br />
<b>Comments:</b><br />
<blockquote><br />
Expose students to a theory of programming languages based on type<br />
theory and operational semantics as a mathematically sound framework<br />
which allows us to investigate the properties of a large number of<br />
programming language features, including:<br />
<br />
* on semantics of different programming languages and programming paradigms: imperative, object oriented, and declarative.<br />
* theoretical foundations of programming languages: syntax, operatational, axiomatic and denotational semantics.<br />
* implementation aspects of central language features, such as dynamic and strong typing, polymorphism, overloading and automatic memory management<br />
<br />
Assignments are in GHC/Haskell, and in the past have included implementing a<br />
mini-Haskell type checker, type inference and interpreter.<br />
</blockquote><br />
<br />
<b>Instructor:</b> Manuel Chakravarty<br />
The University of New South Wales<br><br />
<b>Course:</b> Advanced Functional Programming<br><br />
<b>Student background:</b> Most of them have used Haskell in first year<br><br />
<b>Materials:</b> GHC, papers (see the website)<br><br />
<b>Web page:</b> http://www.cse.unsw.edu.au/~cs4132<br><br />
<b>Last run:</b>2004<br><br />
<b>Comments:</b><br />
<blockquote><br />
To provide students with an understanding of the theory and practice of<br />
the design, use, and implementation of functional programming languages,<br />
such as Haskell<br />
<br />
This includes selected topics from the following areas:<br />
<br />
* Foundations: lambda calculus, semantics, and type systems.<br />
* Design: side-effects, exceptions, concurrency, and parallelism.<br />
* Implementation: abstract machines, program transformation, and memory management. <br />
* Programming techniques: combinator libraries, monads, generic programming, and meta programming.<br />
* Applications: domain specific languages, graphics, web programming, reactive systems, and scientific programming.<br />
</blockquote><br />
<br />
[[Category:Community]]</div>Aivanhttps://wiki.haskell.org/index.php?title=Haskell_in_education&diff=55918Haskell in education2013-05-13T14:57:34Z<p>Aivan: /* Haskell as a second language */</p>
<hr />
<div>[[Category:Education]]<br />
This is a collection of material of interest to those teaching or<br />
taking courses that use Haskell. There is also a more general site,<br />
http://www.cs.kun.nl/fple/, devoted to all functional languages. The proceedings of the latest<br />
[http://www.informatik.uni-kiel.de/~mh/publications/reports/fdpe02/ International Workshop on Functional and Declarative Programming in Education (FDPE)] are now available.<br />
Some of the lecture notes and<br />
other course material found in these web pages are excellent<br />
supplements to the available text books.<br />
If you would like to use lecture<br />
notes, assignments, or other material found in these course web pages<br />
please contact the author for permission.<br />
<br />
Most of the entries are years old. When you add your own new<br />
material to this page, please also say when the course was run for the last time.<br />
<br />
The results of a survey of university courses using Haskell in the academic year 2005-2006 can be found [http://www.cs.chalmers.se/~rjmh/Wash/Survey/teaching.htm here]. Also, some news were added during the 2006-2007 academic year.<br />
<br />
== Suitable Course Textbooks ==<br />
<br />
See [[Books#Textbooks]].<br />
<br />
== Haskell as a first language ==<br />
<br />
These courses teach Haskell to students with no background in programming.<br />
<br />
<b>Instructor:</b> [http://homepages.inf.ed.ac.uk/wadler/ Philip Wadler] University of Edinburgh<br><br />
<b>Course:</b> [[Informatics 1 - Functional Programming]]<br><br />
<b>Materials:</b> GHCi, Emacs, Thompson: Haskell, the Craft of Functional Programming<br><br />
<b>Web page:</b> http://www.inf.ed.ac.uk/teaching/courses/inf1/fp/ <br><br />
<br />
<br />
<b>Instructor:</b> [mailto:page@ou.edu Rex Page] <br />
University of<br />
Oklahoma<br><br />
<b>Course:</b> Introduction to Computer Programming<br><br />
<b>Student background:</b> High-school mathematics<br><br />
<b>Materials:</b> Projects, Exams, Downloadable textbook: Rex Page, <br />
&quot;Two<br />
Dozen Short Lessons in Haskell&quot;<br><br />
<b>Web page:</b> http://www.cs.ou.edu/~rlpage/fpclassSpring97/<br />
<br />
<b>Comments:</b><br />
<blockquote><br />
These materials arose from a course offered for three consecutive<br />
semesters as<br />
an alternative to our usual first course in programming. Most of the<br />
students<br />
who took the course graduated in the past two years, and many of them<br />
cited it<br />
in the exit interview with the department chair as the most influential<br />
course<br />
in the entire academic career.<br />
<p>All materials for two offerings of the course are available through<br />
the web<br />
page. This includes individual projects, team projects, project<br />
solutions,<br />
exams, supplied software (connected with certain projects), tips for<br />
students<br />
taking the course, FAQs addressing questions that students asked during<br />
the<br />
semester, and a short textbook which served as the primary text in the<br />
course.</p><br />
<p>The first 10 to 11 weeks of the course use Haskell. Students are<br />
required to<br />
write nine programs in Haskell, three of which are team projects that<br />
combine<br />
software developed in individual projects. Different members of a team<br />
are<br />
assigned different individual projects, and the team efforts combine<br />
their<br />
solutions into a working piece of software.</p><br />
<p>In the early part of the course, students use operators like map,<br />
foldr, zip,<br />
and iterate to express computations. Explicit recursion is introduced<br />
after some<br />
experience with these common patterns of computation. Examples and<br />
problems<br />
address non-numeric applications, for the most part. Both interactive<br />
and file<br />
I/O are covered, but general purpose monads are not.</p><br />
<p>The last 5 to 6 weeks of the course use C, and most of the projects<br />
in that<br />
part of the course duplicate the function of earlier pieces of software<br />
that the<br />
students have written in Haskell.</p><br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:Jonathan.Hill@comlab.ox.ac.uk Jonathan Hill]<br />
Oxford University Computing Laboratory<br><br />
<b>Course:</b> Functional Programming for the Integrated Graduate Development Programme in Software Engineering at Oxford University.<br><br />
<b>Student background:</b> Discrete mathematics (the course is a part time MSc for people from industry; most are from IBM or Nortel).<br><br />
<b>Materials:</b> Gofer (an old version, with a stripped down prelude---no parameter classes!); Own course material<br><br />
<b>Web page:</b> http://www.comlab.ox.ac.uk/igdp/text/course06.html<br />
Note: Web pages not accessible. May be ... moved ? <br />
<br />
<br />
<b>Instructor:</b> [mailto:nxg@cs.nott.ac.uk Neil Ghani]<br />
School of Computer Science, University of Nottingham<br><br />
<b>Course:</b> Functional Programming<br><br />
<b>Student background:</b> None<br><br />
<b>Materials:</b> Hugs; Graham Hutton, Programming in Haskell; own lecture slides<br><br />
<b>Web page:</b> http://www.cs.nott.ac.uk/~nxg/G51FUN06/fun.html<br />
<br />
<b>Instructor:</b> [mailto:prins@cs.unc.edu" Jan Prins]<br />
UNC Chapel Hill<br><br />
<b>Course:</b> Introduction to Functional Programming<br><br />
<b>Student background:</b> solid background in high-school science and mathematics<br><br />
<b>Materials:</b> Hugs 1.4 incl. Active Haskell, FRAN and [[Haskore]]; Simon Thompson, "Haskell: The Art of Functional Programming"<br><br />
<b>Web page:</b> http://www.cs.unc.edu/~prins/Classes/15/<br><br />
<b>Comments:</b><br />
<blockquote><br />
(Introductory programming course for CS and math/science majors, typically Freshman and Sophomores. Class size ~60)<br />
<br />
Our undergraduate computing environment is now largely<br />
PCs running Windows NT. We use NTEmacs as the programming<br />
environment with a slightly modified version of Emacs hugs<br />
mode with hugs running as a subprocess. The combined<br />
hugs/NTEmacs/Active Haskell distribution (available through<br />
course home page) is installed on 400+ public Win NT machines<br />
on campus and some unknown number of student-owned Win 95/98<br />
machines.<br />
<br />
This arrangement is new this semester, but so far has been<br />
working well. Keystroke-oriented interactive applications<br />
may be problematic with hugs running in NTEmacs shell mode.<br />
<br />
I'm planning assignments using Fran and Active Haskell and<br />
will try teaching the "brief introduction to imperative<br />
programming" at the end of the class using monads. I would<br />
be interested in talking with anyone who has experience or<br />
suggestions along these lines.<br />
<br />
I took a cue from Paul Hudak and others and have occasional<br />
appearances of MS Agents during lectures to wake students up!<br />
<br />
This is my first time teaching this course, and I would<br />
enjoy talking to others teaching at a similar level. A<br />
cursory search on the web didn't reveal many courses<br />
in this category.<br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:dave@cs.chalmers.se David Sands]<br />
University of Gothenburg & Chalmers University of Technology<br><br />
<b>Course:</b> Programmering för Naturvetare<br><br />
<b>Student background:</b> New students<br><br />
<b>Materials:</b> hugs 1.4; Simon Thompson<br><br />
<b>Web page:</b> http://www.md.chalmers.se/Cs/Grundutb/Kurser/nptah/<br><br />
<b>Comments:</b><br />
<blockquote><br />
This is the first part of a first course in programming. About 16<br />
lectures, each 2x45 mins plus weekly exercise classes and three<br />
assessed programming exercises. Most of my materials are in English.<br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:M.A.Rodrigues@dcs.hull.ac.uk Marcos A Rodrigues]<br />
The University of Hull, Hull, UK<br><br />
<b>Course:</b> Functional and Logic Programming<br><br />
<b>Student background:</b> none<br><br />
<b>Materials:</b> hugs 1.4; Haskell: the Craft of Functional Programming. Thompson S., Addison Wesley, 1996.<br><br />
<br />
<b>Instructor:</b> [mailto:Torsten.Grust@uni-konstanz.de Torsten Grust]<br />
University of Konstanz (Germany)<br> <br />
<b>Course:</b> Deklarative Programmierung (Declarative Programming, in german)<br><br />
<b>Student background:</b> basic math, no programming background required<br><br />
<b>Materials:</b> Hugs 1.4; (~300) slides available from the course web page;<br />
Jeroen Fokker's classroom text: Functional Programming<br />
http://www.cs.uu.nl/~jeroen/courses/fp-eng.ps.gz</a>;<br />
Richard Bird, Phil Wadler: Introduction to Functional Programming; Simon Peyton-Jones: Implementation of Functional Programming Languages<br><br />
<b>Web page:</b> http://www.fmi.uni-konstanz.de/dbis/Courses-old/Courses-ss98/decl-ss98.html<br><br />
<b>Comments:</b><br />
<blockquote><br />
The course is in German only (sorry about that). It additionally<br />
features an introduction to logical programming and Prolog.<br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:richardb@cse.unsw.edu.au Richard Buckland]<br />
University of New South Wales<br><br />
<b>Course:</b> Computing 1A<br><br />
<b>Student background:</b> Mixed, some have no computing<br />
background. This is our cs1 subject.<br><br />
<b>Materials:</b> Hugs 1.4; Simon Thompson<br><br />
<b>Web page:</b> http://www.cse.unsw.edu.au/~cs1011<br><br />
<br />
<br />
<b>Instructor:</b> [mailto:robert@techfak.uni-bielefeld Robert Giegerich], Stefan Posch, University Bielefeld, Germany<br><br />
<b>Course:</b> Introduction to Computer Science<br><br />
<b>Student background:</b> Completed High School (Abitur)<br><br />
<b>Materials:</b> Hugs; Class Notes by Robert Giegerich and Ralf Hinze<br><br />
<b>Comments:</b><br />
<blockquote><br />
Our first semester course<br />
uses Haskell as a vehicle to fundamental aspects of computation:<br />
algorithmics, specification and verification, efficiency analysis,<br />
programming methods. This works wonderfully. We do not require previous<br />
or additional programming experience. Haskell is quickly learned, <br />
to the necessary degreee; we make no attempt to cover the full language.<br />
This is NOT a Haskell course! Haskell allows us to speak about concepts<br />
of computer science WITHOUT a lot of language learning. And Haskell<br />
even helps to keep out detrimental habits from previous programming<br />
experience, as well as motivational problems resulting from the widely<br />
differing previous experiences of our incoming students.<br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:hj@sm.luth.se Håkan Jonsson] Luleå University of Technology, Sweden<br><br />
<b>Course:</b> SMD001, functional programming<br><br />
<b>Student background:</b> <br />
None. This is the very first programming course <br />
our students take.<br><br />
<b>Materials:</b> <br />
Materials: Simon Thompson's Haskell book + 7 laboratory/programming <br />
assignments using Hugs.<br />
<br><br />
<b>Web page:</b>http://www.sm.luth.se/csee/courses/smd/001/ (mostly Swedish)<br> <br />
<br />
<br />
<b>Instructor:</b> [mailto:Clem.Baker-Finch@cs.anu.edu.au Clem Baker-Finch, Australian National University<br><br />
<b>Course:</b>Introduction to Programming and Algorithms<br><br />
<b>Student background:</b> No programming background was<br />
assumed.<br />
<br><br />
<b>Materials:</b> GHC, GHCi, Simon Thompson 1st ed., my own materials. <br />
<br><br />
<b>Web page:</b> http://cs.anu.edu.au/Student/comp1100/<br> <br />
<b>Comments:</b><br />
<blockquote><br />
The first 75% of the course is basic programming concepts using Haskell. The remainder covers the same concepts in Java. This is reinforced - hopefully - by the third assignment (in Java) being the same as the first assignment (in Haskell). The aim is to provide a managed transition to the course which follows in second semester. Another point of possible interest is the use of a simple graphics library, ANUPlot, built on top of the OpenGL binding. See http://code.google.com/p/anuplot/<br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:lyndon@cs.uwa.edu.au Lyndon While] The University of Western Australia<br><br />
<b>Course:</b> Foundations of Computer Science<br><br />
<b>Student background:</b> None<br><br />
<b>Materials:</b> hugs 98; Thompson.<br><br />
<b>Web page:</b> http://undergraduate.cs.uwa.edu.au/courses/230.123<br><br />
<br />
<br />
<b>Instructor:</b> [http://www.cs.us.es/~jalonso José A. Alonso Jiménez] Dept of Computer Science and A.I., University of Seville, Spain<br><br />
<b>Course:</b> Informatics (Inform&aacute;tica, in spanish)<br><br />
<b>Student background:</b> None. This is the very first programming course <br />
our students take.<br><br />
<b>Materials:</b> GHCi, Emacs, Graham Hutton: &quot;Programming in Haskell&quot;, Slides, Exercises, Exams <br><br />
<b>Web page:</b> http://www.cs.us.es/~jalonso/cursos/i1m (in spanish)<br><br />
<b>First run:</b> 2009–2010<br><br />
<b>Last run:</b> 2012–2013<br />
<br />
----<br />
<br />
== Haskell as a second language ==<br />
<br />
These courses teach Haskell to students that have already learned<br />
another language.<br />
<br />
<b>Instructor:</b> [mailto:page@ou.edu Rex Page]<br />
University of Oklahoma<br><br />
<b>Course:</b> Discrete Mathematics<br><br />
<b>Student background:</b> High-school mathematics, introductory programming<br />
course (any language)<br><br />
<b>Materials:</b> Lecture notes, Projects, Exams, Solutions, Proof checking<br />
tools, etc.; text: Hall and O'Donnell, &quot;Discrete Mathematics with a<br />
Computer&quot;<br><br />
<br />
<b>Web page:</b> http://www.cs.ou.edu/~beseme/<br><br />
<b>Comments:</b><br />
<blockquote><br />
Lecture notes comprise over 350 animated slides (all both PowerPoint and<br />
PDF<br />
formats). About two-thirds of the material centers around mathematical logic.<br />
After the introduction of predicates, all of the examples in the logic<br />
portion<br />
of the course involve reasoning about properties of software, most of which is<br />
expressed in Haskell (a few are conventional looping functions).<br />
<p>Software examples include sum, sequence concatenation, logical operations on<br />
sequences, the Russian peasant algorithm, insertion and lookup in AVL <br />
trees, and<br />
other computations. Most of the properties verified relate to aspects of <br />
program<br />
correctness, but resource utilization properties are also verified in <br />
some<br />
cases. Several semesters worth of exams (finals and exams given during <br />
the term)<br />
are provided. The slides have matured through several offerings of the course.</p><br />
<p>The remaining third of the course discusses other standard topics<br />
in discrete<br />
mathematics, such as sets, functions, relations, trees, and counting.<br />
The web<br />
page provides access to a preview of the material. Exams and solutions are<br />
protected by a login procedure (to increase the comfort level of<br />
instructors<br />
wishing to use them in courses). The web page provides a link through<br />
which<br />
instructors may gain access to the full website.</p><br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:labra@lsi.uniovi.es Jose Emilio Labra Gayo],<br />
Dept. of Computer Science (EUITIO) University of Oviedo<br><br />
<b>Course:</b> Logic and Functional Programming<br><br />
<b>Student background:</b> The course is oriented towards third year undergraduate students in computer science. Usually, the students have been<br />
introduced to imperative languages like Pascal and Object <br />
Oriented Languages like C++<br><br />
<b>Materials:</b> Hugs; R. Bird "Introd. to FP using Haskell" (2nd Ed), J. E. Labra Gayo. "Introduction to the Haskell Language" (in spanish).<br><br />
<b>Web page:</b> http://lsi.uniovi.es/~labra/plf.html (in spanish).<br />
My FP page: http://lsi.uniovi.es/~labra/FuncProg.html<br><br />
<br />
<br />
<b>Instructor:</b> [mailto:fruehr@willamette.edu Fritz Ruehr]<br />
Willamette University, Salem, Oregon, USA (a small Liberal Arts College, about 1 hour from Portland & OGI)<br><br />
<b>Course:</b> CS 451 Topics in Computer Science: Functional Programming<br><br />
<b>Student background:</b> Data structures (I may also have required discrete math)<br><br />
<b>Materials:</b> Hugs 1.4 beta (I also taught Scheme); Haskell: The Craft of Functional Programming by Simon Thompson (I also used my own on-line lecture notes and labs and Kent Dybvig's text on Scheme)<br><br />
<b>Web page:</b> http://www.willamette.edu/~fruehr/451/<br><br />
<b>Comments:</b><br />
<blockquote><br />
The notes and labs I have on-line are in pretty rough form: many slide <br />
points are just one-line topical stubs I used as reminders in lecture.<br />
Many of the on-line materials are not linked into the (out of date)<br />
home page.<br />
<br />
I hope to have the course approved for next Fall as a regular offering<br />
(i.e., not as a "special topic") and should have more extensive<br />
on-line materials up by then.<br />
<br />
Teaching "bi-lingually" in Haskell and Scheme seemed like a good idea<br />
at the time, but next time around I will use Haskell as the main vehicle,<br />
perhaps taking some time near the end of the course to highlight some<br />
other languages (Scheme, ML, Clean).<br />
<br />
Some of my students used Conal Elliot's Fran and Paul Hudak's Haskore<br />
and liked them a lot; I was nice to have some significantly-sized<br />
applications that seemed more practical and fun to show off at the end<br />
of the course (I should have demonstrated these things at the beginning<br />
of the course to help with motivation). Next time around I would like to<br />
have a "beginner's prelude" or similar available to avoid problems with<br />
classes in type inference, Int vs. Integer, etc. These problems were a<br />
constant annoyance during lectures.<br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:J.Hamer@cs.auckland.ac.nz John Hamer],<br />
University of Auckland<br><br />
<b>Course:</b> Logic and Functional Programming<br><br />
<b>Student background:</b> Year 2 programming + some discrete maths<br><br />
<b>Materials:</b> Hugs 98, Haskell School of Expression, Page "Two Dozen Short Lessons in Haskell",<br><br />
<b>Web page:</b> http://www.cs.auckland.ac.nz/compsci360fc<br><br />
<br />
<br />
<b>Instructor:</b> [mailto:lengauer@fmi.uni-passau.de Chris Lengauer]<br />
University of Passau<br><br />
<b>Course:</b> Functional Programming<br><br />
<b>Student background:</b> two years of CS study<br><br />
<b>Materials:</b> hugs; Richard Bird's new text (PHI)<br><br />
<b>Web page:</b> not reachable from outside Passau<br><br />
<br />
<br />
<b>Instructor:</b> [mailto:cunningham@cs.olemiss.edu Conrad Cunningham]<br />
University of Mississippi<br><br />
<b>Course:</b> Functional Programming<br><br />
<b>Student background:</b> official -- senior or graduate standing; actual -- introductory programming, data structures, and discrete math<br><br />
<b>Materials:</b> Hugs on Unix and MS Windows systems;<br />
Mostly use the instructor's own set of lecture notes. Also Simon Thompson's HASKELL: THE CRAFT OF FUNCTIONAL PROGRAMMING. Previously used the Bird and Wadler textbook<br><br />
<b>Web page:</b> http://www.cs.olemiss.edu/~hcc/csci555/<br><br />
<b>Comments:</b><br />
<blockquote><br />
Although I am not a researcher in FP, I enjoy teaching the FP course.<br />
Most of the students take to the course after a few weeks. Hugs works<br />
reasonably well, but, of course, more pedagogically oriented error messages<br />
and other support tools would be helpful.<br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:leavens@cs.iastate.edu Gary T. Leavens],<br />
Iowa State University<br><br />
<b>Course:</b> Programming Languages 1<br><br />
<b>Student background:</b> undergraduate course in compilers or programming languaages<br><br />
<b>Materials:</b> Hugs 1.4; Thompson's Haskell: The Craft of Programming<br><br />
<b>Web page:</b> http://www.cs.iastate.edu/~leavens/ComS541.html<br><br />
<b>Comments:</b><br />
<blockquote><br />
Be sure to tell your students how to debug programs.<br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:jtod@dcs.gla.ac.uk John O'Donnell]<br />
University of Glasgow<br><br />
<b>Course:</b> Functional Programming<br><br />
<b>Student background:</b> Programming (in Ada), Algorithmic Foundations<br><br />
<b>Materials:</b> Hugs; Simon Thompson's book on Haskell<br><br />
<b>Web page:</b> http://www.dcs.gla.ac.uk/courses/teaching/level2/modules/#FP2<br><br />
<br />
<b>Instructor:</b> [mailto:chitil@informatik.rwth-aachen.de Olaf Chitil],<br />
RWTH Aachen, Germany<br><br />
<b>Course:</b> Functional Programming in Haskell<br><br />
<b>Student background:</b> basic programming skills (not necessarily in a<br />
functional language)<br><br />
<b>Materials:</b> Hugs 1.4; Hugs user manual, slide copies;<br />
additionally the `Gentle Introduction to Haskell', probably Bird's `Introduction<br />
to Functional Programming using Haskell' in the future.<br><br />
<b>Web page:</b> http://www-i2.informatik.rwth-aachen.de/Praktikum/SWP/ (in German)<br><br />
<b>Comments:</b><br />
<blockquote><br />
The course starts with 4 full time days of learning Haskell. During the semester<br />
the students (in groups of 2 students) have to implement a compiler and an<br />
abstract machine for a simple imperative language. They are given parts of the<br />
system and a manual on how to do the remaining parts (they have no prior<br />
knowledge on compiler construction).<br />
The most difficult construct for students to understand is the monad. I<br />
introduce IO without mentioning monads. Later I explain how to build a simple<br />
exception handling system based on the type `Maybe a' / `Error a'. Only<br />
subsequently I give the general definition of monads and present the list monad<br />
and a simple state monad. However, I fear that just to understand the bind<br />
operator `>>=' requires people to be quite comfortable with higher-order<br />
functions.<br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [http://web.comlab.ox.ac.uk/oucl/people/richard.bird.html Richard Bird], Oxford Brookes University<br><br />
<b>Course:</b> Functional Programming<br><br />
<b>Student background:</b> Elementary structured programming<br><br />
<b>Web page:</b> http://web.comlab.ox.ac.uk/oucl/courses/topics00-01/fp/<br><br />
<br />
<br />
<b>Instructor:</b> [mailto:paul.hudak@yale.edu Paul Hudak],<br />
Yale University, Dept of Computer Science<br><br />
<b>Course:</b> Functional Programming<br><br />
<b>Student background:</b> at least one programming course<br><br />
<b>Materials:</b> Hugs; my own textbook, which is under preparation<br><br />
<b>Web page:</b> none<br><br />
<br />
<br />
<b>Instructor:</b> [mailto:abf@cs.ucc.ie Alex Ferguson]<br />
University College Cork<br><br />
<b>Course:</b> Functional and Logic Programming<br><br />
<b>Student background:</b> Final year undergraduate<br />
<br><br />
<b>Materials:</b> Final year undergraduate<br />
Materials: Hugs 98; ghc; Simon Thompson, "Haskell: The Craft of<br />
Functional Programming" (2nd ed.)<br />
<br><br />
<b>Web page:</b> http://yeats.ucc.ie/~abf/CS4001/<br> <br />
<b>Comments:</b><br />
<blockquote><br />
This is the declarative programming option for 4th year<br />
undergrads, who have Java as a first programming language, and some<br />
knowledge of C and C++. The current final year have had some exposure<br />
to Haskell in first year, though this is no longer the case for our<br />
current intake.<br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:lky@nada.kth.se Leif Kusoffsky],<br />
Royal Institute of Technology, Stockholm<br><br />
<b>Course:</b> Functional Programming 2D1370<br><br />
<b>Student background:</b> The course is oriented towards third year<br />
undergraduate students in computer science. The students<br />
have been introduced to imperative languages like<br />
C and Object Oriented Languages like Java<br />
<br><br />
<b>Materials:</b> Hugs; Hudak : The Haskell School of Expression<br />
<br><br />
<br />
<br />
<b>Instructor:</b> Jeremy Bobbio -- INSIA<br><br />
<b>Course:</b> Functional and Logic Programming<br><br />
<b>Student background:</b> One year CS<br />
<br><br />
<b>Materials:</b> <br />
Hugs, GHC, Paul Hudak's Haskell School of Education<br />
<br><br />
<b>Web page:</b> http://etudiants.insia.org/~jbobbio/pafp/ (french)<br> <br />
<br />
<br />
<b>Instructor:</b> [mailto:antkaij@mit.jyu.fi Antti-Juhani Kaijanaho]<br />
University of Jyväskylä<br><br />
<b>Course:</b> Functional Programming 1 & 2<br><br />
<b>Student background:</b> third-year undergraduate and up<br />
<br><br />
<b>Materials:</b><br />
GHC, Gtk2HS<br />
<br><br />
<b>Web page:</b> [http://www.mit.jyu.fi/antkaij/opetus/fo/2005-2006/index.en.html]<br />
<br><br />
<b>Last run:</b> 2005&ndash;2006<br />
<br><br />
<!--<b>Comments:</b><br />
<blockquote><br />
(I'll write this later)<br />
</blockquote>--><br />
<br />
<b>Instructor:</b> [mailto:djd@comp.leeds.ac.uk David Duke]<br />
University of Leeds, School of Computing<br><br />
<b>Course:</b> Functional Programming<br><br />
<b>Student background:</b> Second and third year undergraduate<br />
<br><br />
<b>Materials:</b> ghc; Graham Hutton "Programming in Haskell"<br />
<br><br />
<b>Web page:</b> www.comp.leeds.ac.uk/se23/<br> <br />
<b>Comments:</b><br />
<blockquote><br />
This is an optional course that students currently can take in <br />
second or third year (from 2008/9 it will be third-years only).<br />
Students will have previously used Python and Java.<br />
Although the emphasis is on learning to solve problems within<br />
the functional paradigm, and how to develop solutions within<br />
Haskell, I also like to show students what is "under the<br />
bonnet" and conclude the module with an introduction to<br />
implementation issues, using material derived from<br />
"Implementing Functional Languages" by Simon Peyton Jones and <br />
David Lester. <br />
</blockquote><br />
<br />
<b>Instructor:</b> [mailto:popavdan@yahoo.com Popa V. Dan]<br />
University of Bacau, Romania <br><br />
<b>Course:</b> "Limbaje formale si automate" (Formal languages and automata) <br><br />
<b>Student background:</b> second-year undergraduate <br />
<br><br />
<b>Materials:</b> Hugs 98 (2002 revised version) included in Mandriva (Formely Mandrake) 10.0 Linux Distribution<br />
<br><br />
<b>Web page:</b> Not yet. Try the page of the "ro" community on www.haskell.org<br />
<br> [http://www.haskell.org/haskellwiki/Ro/Haskell Ro/Haskell webpage is here] <br><br />
<b>First run:</b> 2006&ndash;2007<br />
<br><br />
<br />
Haskell is used as an implementation languages in student's laboratories.<br />
The ideea was to provide a language powerfull enough to be able to express <br />
how to build a parser starting from a grammmar. The students are able<br />
to build small (monadic) interpreters for "while-languages" using a <br />
recommanded monad and a recommanded back-end. The labs are focusing on the <br />
grammar of the languages, on the modular (monadic) parsing as a tool for <br />
verifying and processing inputs which are not validable by finite state <br />
automata but by context free grammmars. Adaptability of the language, <br />
especially obtained manipulating and improving syntax is also a target.<br />
<br />
Support (concerning Haskell): "O introducere in Haskell prin exemple" by<br />
Dan Popa, published in january 31,2007 by <br />
[http://www.edusoft.ro Edusoft](in romanian) Contact the author if needed .<br />
<br />
Other recommanded books: "Gentle Introd to Haskell 98" and YAHT <br />
Recomanded papers: All about monadic parsing. <br />
Special message for Graham Hutton, Erik Meijer and P. Wadler and all <br />
other authors with similar interests from the Haskell <br />
community:<br />
<br />
Thank you very much for your papers concerning Monadic parsing and <br />
interpreters ! <br />
<br />
'''Instructor:''' National and Technological University, Buenos Aires, Argentina Universidad Tecnológica Nacional - Facultad Regional Buenos Aires)<br><br />
'''Course:''' Programming Paradigms <br><br />
'''Student background:''' This is a second-year undergraduate course. Students have already been introduced to basic structured programming concepts <br><br />
<br />
----<br />
<br />
== Comparative programming languages ==<br />
<br />
These courses teach general programming language principles, with<br />
Haskell as an example of a functional language.<br />
<br />
<b>Instructor: </b> Ruediger Marcus Flaig, University of Heidelberg (Germany)<br />
<br><br />
<b>Course:</b> An introduction to programming in bioinformatics <br><br />
<b>Student background:</b> different, but generally low<br><br />
<b>Materials:</b> Hugs-98 and lots of other stuff<br />
<br><br />
<b>Web page:</b> http://www.sanctacaris.net/rc.html<br> <br />
<b>Comments:</b><br />
<blockquote><br />
This course is designed to introduce life science students,<br />
that is to say, going-to-be biologists, physicians, biotechnologists<br />
and maybe others, to solving real-life problems (such as DNA sequence<br />
handling and analysis). Emphasis will be on paradigms (imperative /<br />
OO, functional, declarative). Although -- in order not to frighten<br />
people -- the official announcement mentions only Python, Haskell will<br />
be presented as THE purely functional language, and all solutions may<br />
be presented in either Python, Haskell or Java. I am very curious<br />
about the feedback I'll get, and maybe next term we shall focus more<br />
on Haskell. What I'd really need, though, is some life science related<br />
package for Haskell, such as BIOPYTHON and BIORUBY. <br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:ham@cs.utexas.edu Hamilton Richards],<br />
University of Texas (Austin)<br><br />
<b>Course:</b> Programming Languages (taught in 2005)<br><br />
<b>Student background:</b> <br><br />
<b>Materials:</b> Hugs 1.4; Sethi, Davie.<br><br />
<b>Web page:</b> http://www.cs.utexas.edu/users/ham/UTCS/CS345/<br><br />
<b>Comments:</b><br />
<blockquote><br />
I'm using Haskell in a programming-languages course, but it's distributed<br />
somewhat piecemeal through the course. Probably adds up to something like<br />
3-4 weeks (out of 15).<br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [http://www.cs.waikato.ac.nz/~marku Mark Utting]<br />
University of Waikato (New Zealand)<br />
<b>Course:</b> Programming Languages<br><br />
<b>Student background:</b> Two years of C++ and 1 year of Haskell<br><br />
<b>Materials:</b> Textbook "Programming Languages", Louden.<br />
<b>Web page:</b> http://www.cs.waikato.ac.nz/~marku/313<br><br />
<b>Comments:</b><br />
<blockquote><br />
The course covers at least two languages in each of the<br />
main paradigms (object-oriented, functional and logic programming),<br />
plus history, semantics and implementation issues.<br />
The Haskell section is about 2 weeks long and usually focusses on <br />
programming with higher-order functions and how that enables the<br />
language to be extended in application-specific ways<br />
(parser combinators, html-generation combinators etc.)<br />
</blockquote><br />
<br />
<b>Instructor:</b> [mailto:zeeshan@apiit.edu.pk M Zeeshan Ali Ansari],<br />
Asia Pacific Institute of Information Technology (Pakistan)<br><br />
<b>Course:</b> Advanced Programming Language Concepts<br><br />
<b>Student background:</b> Students having studied and worked on Imperative Programming Languages <br><br />
<b>Materials:</b> The Craft of Haskell, A Gentle Introduction to Haskell, Yet Another Haskell Tutorial.<br><br />
<b>Web page:</b> http://www.apiit.edu.pk<br><br />
<b>Comments:</b><br />
<blockquote><br />
This course compares and contrasts various programming language paradigms including Functional Programming. Out of 13 week course 5 to 6 of them are dedicated towards Haskell. The material is basically written in a way that enables imperative language programmers to understand the concepts and power of functional programming <br />
<br />
http://www.haskell.org/sitewiki/images/3/3d/Functional_Programming_Tutorial_By_Zeeshan_Ali_Ansari.doc<br />
<br />
<br />
</blockquote><br />
<br />
<b>Instructor:</b> John C. Mitchell,<br />
Stanford University<br><br />
<b>Course:</b> Programming Languages<br><br />
<b>Student background:</b> Some experience with Lisp/C/object-oriented languages.<br><br />
<b>Materials:</b> Concepts in Programming Languages (new Haskell chapters written with Kathleen Fisher)<br><br />
<b>Web page:</b> http://cs242.stanford.edu<br><br />
<b>Comments:</b><br />
<blockquote><br />
Central concepts in modern programming languages, impact on software development, language design trade-offs, and implementation considerations. Functional, imperative, and object-oriented paradigms. Formal semantic methods and program analysis. Modern type systems, higher order functions and closures, exceptions and continuations. Modularity, object-oriented languages, and concurrency. Runtime support for language features, interoperability, and security issues. <br />
</blockquote><br />
<br />
----<br />
<br />
== Advanced functional programming using Haskell ==<br />
<br />
These courses deal with the advanced issues such as semantics, type<br />
systems, or compilers. Includes a other advanced courses taught using<br />
Haskell. <br />
<br />
<b>Instructor:</b> [mailto:gmh@cs.nott.ac.uk Graham Hutton]<br />
School of Computer Science, University of Nottingham<br><br />
<b>Course:</b> Advanced Functional Programming<br><br />
<b>Student background:</b> At least one year of CS, including a course in Haskell<br><br />
<b>Materials:</b> Hugs; GHC; Graham Hutton, Programming in Haskell; own course material<br><br />
<b>Web page:</b> http://www.cs.nott.ac.uk/~gmh/afp.html<br />
<br />
<b>Instructor:</b> [mailto:rjmh@cs.chalmers.se John Hughes]<br />
Chalmers University, Gothenburg<br><br />
<b>Course:</b> Advanced Functional Programming<br><br />
<b>Student background:</b> General CS maturity; from this year most students have already used Haskell in introductory courses.<br><br />
<b>Materials:</b> Mainly hbc.; Papers (see web page)<br><br />
<b>Web page:</b> http://www.cs.chalmers.se/~rjmh/AFP<br><br />
<b>Comments:</b><br />
<blockquote><br />
The goal is to teach students how to solve substantial problems in a<br />
functional language --- `functional programming in anger', one might say. The<br />
emphasis is on design and use of suitable combinator libraries to simplify<br />
applications. Material covered includes monad design, use of CPS style,<br />
libraries for parsing, pretty-printing, and GUIs (presently fudgets). <br />
<br />
The course is taught in a `problem based' manner: lectures are few, while<br />
students solve three substantial programming problems during the term, with<br />
plenty of backup via group meetings. I adopted this teaching form three years<br />
ago, and it has led students to develop far better practical skills than most<br />
obtained from my earlier `lectures and exercises' courses, and I believe to<br />
use Haskell much more after the course's end.<br />
<br />
This course is optional in the third or fourth year, and is taken by a<br />
small-to-medium sized group of students.<br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:Olof.Johanssson@cs.umu.se Olof Johansson], Umeå Univesity, Department of Computing Science<br><br />
<b>Course:</b> Programming language semantics<br><br />
<b>Student background:</b> two terms of computer science studies and specificaly a course Programming language concepts<br><br />
<b>Materials:</b> Hugs and some HBC and GHC; Watt, Programming language, Syntax and Semantics<br><br />
<b>Web page:</b> http://www.cs.umu.se/local/kurser/TDBC05 (Only in swedish)<br> <br />
<br />
<br />
<b>Instructor:</b> [mailto:lyndon@cs.uwa.edu.au Lyndon While]<br />
The University of Western Australia<br><br />
<b>Course:</b> Functional Programming<br><br />
<b>Student background:</b> OOP, plus most of them have used Haskell previously<br><br />
<b>Materials:</b> hugs 98; none of the recent books really fit<br><br />
<b>Web page:</b> http://undergraduate.cs.uwa.edu.au/courses/230.301<br><br />
<b>Instructor:</b> [mailto:F.A.Rabhi@dcs.hull.ac.uk Fethi Rabhi],<br />
University of Hull (UK)<br><br />
<b>Course:</b> AI Problem Solving Techniques (using Haskell and Prolog)<br><br />
<b>Student background:</b> Haskell and Prolog programming<br><br />
<b>Materials:</b> HUGS; Thompson'96, own notes (soon to be published as a book).<br><br />
<b>Web page:</b> none<br><br />
<b>Comments:</b><br />
<blockquote><br />
It is very hard to justify learning Haskell unless it can be<br />
demonstrated in very practical situations (hence the provision<br />
of the above course).<br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:karczma@info.unicaen.fr Jerzy Karczmarczuk]<br />
University of Caen, Caen (France)<br> No links in the fr-Haskell page. Why not ?<br />
<b>Course:</b> Compilation<br><br />
<b>Student background:</b> General CS knowledge; students (should...) know Scheme and imperative languages, also some theory of languages and automata.<br><br />
<b>Materials:</b> <br />
Hugs, GHC, now also GHCi, and their documentation. Handouts: (still a little incomplete)<br />
Impossible to find the foolowing matterials.Files can not be found. <br />
* http://users.info.unicaen.fr/~karczma/matrs/Maitcomp/compilation_a.pdf<br />
* http://users.info.unicaen.fr/~karczma/matrs/Maitcomp/compilation_b.pdf<br />
* http://users.info.unicaen.fr/~karczma/matrs/Maitcomp/compilation_c.pdf<br />
<b>Comments:</b><br />
<blockquote><br />
This is a compulsory semestrial course in fourth year. Weekly: 1.5h<br />
course, 2.5H practice.<br />
One, but comprehensive assignment, taking 2 months or more.<br />
askell is our main coding tool. A little time is devoted by necessity<br />
to the language<br />
itself, but also from the perspective: "how would you compile such a<br />
language".<br />
"Standard stuff", such as parsing combinators, etc.is covered, but we<br />
don't begin with that.<br />
We start with the construction of small interpreters: from recursive<br />
Lisp-style to postfix,<br />
(Forth/PostScript style) constructing this last by partial evaluation<br />
(intuitively).<br />
We introduce control structures as lazy functions, operation<br />
sequencing through continuations,<br />
monads not only for parsing, but also for exceptions and<br />
non-determinism.<br />
We discuss (simply) the type inference. The code generator assembles a<br />
linear code by lazy<br />
concatenation of chunks which makes it trivial to deal with loops and<br />
cross-referencing<br />
fragments. Algorithms of garbage collection are presented (not<br />
implemented, though...) in<br />
a purely functional style.<br />
<br />
Students' opinion: "Frightening at first. Learning curve steep, but<br />
much less time spent on debugging, coding proficiency comes fast. Good for<br />
understanding what the compilation is about, but difficult to make a<br />
complete running program with all the I/O, etc.<br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:jeffm@cse.uconn.edu Jeffrey A. Meunier], University of Connecticut<br><br />
<b>Course:</b> CSE240 Intermediate Computer Systems<br><br />
<b>Student background:</b> computer/microprocessor organization<br />
<br><br />
<b>Materials:</b> Hugs (Feb 2001); Bird ``Introduction to Functional<br />
Programming''; Furber ``ARM System-on-Chip Architecture''<br />
<br><br />
<b>Web page:</b> http://www.engr.uconn.edu/~jeffm/Classes/CSE240-Spring-2001/index.html<br> <br />
<b>Comments:</b><br />
<blockquote><br />
This is a course in the low level programming of microprocessor systems.<br />
The course will focus on the development of an emulator (virtual<br />
machine, or VM) for a small computer system based on a modern RISC<br />
microprocessor (the ARM CPU) using a high level programming language<br />
(Haskell), and assembly language programming of the VM. Development of<br />
the VM will occur in stages, starting with the simple direct-execution<br />
(stream-based) model, gradually moving to a more realistic memory-mapped<br />
model, including exception handlers, concurrent processes, and<br />
asynchronous external devices.<br />
</blockquote><br />
<br />
<b>Instructor:</b> Gabriele Keller<br />
The University of New South Wales<br><br />
<b>Course:</b> Concepts of Programming Languages<br><br />
<b>Student background:</b> Most of them have used Haskell in first year<br><br />
<b>Materials:</b> GHC, TaPL and `Programming Languages: Theory and Practice', papers<br><br />
<b>Web page:</b> http://www.cse.unsw.edu.au/~cs3161<br><br />
<b>Last run:</b> 2006<br><br />
<b>Comments:</b><br />
<blockquote><br />
Expose students to a theory of programming languages based on type<br />
theory and operational semantics as a mathematically sound framework<br />
which allows us to investigate the properties of a large number of<br />
programming language features, including:<br />
<br />
* on semantics of different programming languages and programming paradigms: imperative, object oriented, and declarative.<br />
* theoretical foundations of programming languages: syntax, operatational, axiomatic and denotational semantics.<br />
* implementation aspects of central language features, such as dynamic and strong typing, polymorphism, overloading and automatic memory management<br />
<br />
Assignments are in GHC/Haskell, and in the past have included implementing a<br />
mini-Haskell type checker, type inference and interpreter.<br />
</blockquote><br />
<br />
<b>Instructor:</b> Manuel Chakravarty<br />
The University of New South Wales<br><br />
<b>Course:</b> Advanced Functional Programming<br><br />
<b>Student background:</b> Most of them have used Haskell in first year<br><br />
<b>Materials:</b> GHC, papers (see the website)<br><br />
<b>Web page:</b> http://www.cse.unsw.edu.au/~cs4132<br><br />
<b>Last run:</b>2004<br><br />
<b>Comments:</b><br />
<blockquote><br />
To provide students with an understanding of the theory and practice of<br />
the design, use, and implementation of functional programming languages,<br />
such as Haskell<br />
<br />
This includes selected topics from the following areas:<br />
<br />
* Foundations: lambda calculus, semantics, and type systems.<br />
* Design: side-effects, exceptions, concurrency, and parallelism.<br />
* Implementation: abstract machines, program transformation, and memory management. <br />
* Programming techniques: combinator libraries, monads, generic programming, and meta programming.<br />
* Applications: domain specific languages, graphics, web programming, reactive systems, and scientific programming.<br />
</blockquote><br />
<br />
[[Category:Community]]</div>Aivanhttps://wiki.haskell.org/index.php?title=Haskell_in_education&diff=55917Haskell in education2013-05-13T14:47:43Z<p>Aivan: /* Haskell as a second language */</p>
<hr />
<div>[[Category:Education]]<br />
This is a collection of material of interest to those teaching or<br />
taking courses that use Haskell. There is also a more general site,<br />
http://www.cs.kun.nl/fple/, devoted to all functional languages. The proceedings of the latest<br />
[http://www.informatik.uni-kiel.de/~mh/publications/reports/fdpe02/ International Workshop on Functional and Declarative Programming in Education (FDPE)] are now available.<br />
Some of the lecture notes and<br />
other course material found in these web pages are excellent<br />
supplements to the available text books.<br />
If you would like to use lecture<br />
notes, assignments, or other material found in these course web pages<br />
please contact the author for permission.<br />
<br />
Most of the entries are years old. When you add your own new<br />
material to this page, please also say when the course was run for the last time.<br />
<br />
The results of a survey of university courses using Haskell in the academic year 2005-2006 can be found [http://www.cs.chalmers.se/~rjmh/Wash/Survey/teaching.htm here]. Also, some news were added during the 2006-2007 academic year.<br />
<br />
== Suitable Course Textbooks ==<br />
<br />
See [[Books#Textbooks]].<br />
<br />
== Haskell as a first language ==<br />
<br />
These courses teach Haskell to students with no background in programming.<br />
<br />
<b>Instructor:</b> [http://homepages.inf.ed.ac.uk/wadler/ Philip Wadler] University of Edinburgh<br><br />
<b>Course:</b> [[Informatics 1 - Functional Programming]]<br><br />
<b>Materials:</b> GHCi, Emacs, Thompson: Haskell, the Craft of Functional Programming<br><br />
<b>Web page:</b> http://www.inf.ed.ac.uk/teaching/courses/inf1/fp/ <br><br />
<br />
<br />
<b>Instructor:</b> [mailto:page@ou.edu Rex Page] <br />
University of<br />
Oklahoma<br><br />
<b>Course:</b> Introduction to Computer Programming<br><br />
<b>Student background:</b> High-school mathematics<br><br />
<b>Materials:</b> Projects, Exams, Downloadable textbook: Rex Page, <br />
&quot;Two<br />
Dozen Short Lessons in Haskell&quot;<br><br />
<b>Web page:</b> http://www.cs.ou.edu/~rlpage/fpclassSpring97/<br />
<br />
<b>Comments:</b><br />
<blockquote><br />
These materials arose from a course offered for three consecutive<br />
semesters as<br />
an alternative to our usual first course in programming. Most of the<br />
students<br />
who took the course graduated in the past two years, and many of them<br />
cited it<br />
in the exit interview with the department chair as the most influential<br />
course<br />
in the entire academic career.<br />
<p>All materials for two offerings of the course are available through<br />
the web<br />
page. This includes individual projects, team projects, project<br />
solutions,<br />
exams, supplied software (connected with certain projects), tips for<br />
students<br />
taking the course, FAQs addressing questions that students asked during<br />
the<br />
semester, and a short textbook which served as the primary text in the<br />
course.</p><br />
<p>The first 10 to 11 weeks of the course use Haskell. Students are<br />
required to<br />
write nine programs in Haskell, three of which are team projects that<br />
combine<br />
software developed in individual projects. Different members of a team<br />
are<br />
assigned different individual projects, and the team efforts combine<br />
their<br />
solutions into a working piece of software.</p><br />
<p>In the early part of the course, students use operators like map,<br />
foldr, zip,<br />
and iterate to express computations. Explicit recursion is introduced<br />
after some<br />
experience with these common patterns of computation. Examples and<br />
problems<br />
address non-numeric applications, for the most part. Both interactive<br />
and file<br />
I/O are covered, but general purpose monads are not.</p><br />
<p>The last 5 to 6 weeks of the course use C, and most of the projects<br />
in that<br />
part of the course duplicate the function of earlier pieces of software<br />
that the<br />
students have written in Haskell.</p><br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:Jonathan.Hill@comlab.ox.ac.uk Jonathan Hill]<br />
Oxford University Computing Laboratory<br><br />
<b>Course:</b> Functional Programming for the Integrated Graduate Development Programme in Software Engineering at Oxford University.<br><br />
<b>Student background:</b> Discrete mathematics (the course is a part time MSc for people from industry; most are from IBM or Nortel).<br><br />
<b>Materials:</b> Gofer (an old version, with a stripped down prelude---no parameter classes!); Own course material<br><br />
<b>Web page:</b> http://www.comlab.ox.ac.uk/igdp/text/course06.html<br />
Note: Web pages not accessible. May be ... moved ? <br />
<br />
<br />
<b>Instructor:</b> [mailto:nxg@cs.nott.ac.uk Neil Ghani]<br />
School of Computer Science, University of Nottingham<br><br />
<b>Course:</b> Functional Programming<br><br />
<b>Student background:</b> None<br><br />
<b>Materials:</b> Hugs; Graham Hutton, Programming in Haskell; own lecture slides<br><br />
<b>Web page:</b> http://www.cs.nott.ac.uk/~nxg/G51FUN06/fun.html<br />
<br />
<b>Instructor:</b> [mailto:prins@cs.unc.edu" Jan Prins]<br />
UNC Chapel Hill<br><br />
<b>Course:</b> Introduction to Functional Programming<br><br />
<b>Student background:</b> solid background in high-school science and mathematics<br><br />
<b>Materials:</b> Hugs 1.4 incl. Active Haskell, FRAN and [[Haskore]]; Simon Thompson, "Haskell: The Art of Functional Programming"<br><br />
<b>Web page:</b> http://www.cs.unc.edu/~prins/Classes/15/<br><br />
<b>Comments:</b><br />
<blockquote><br />
(Introductory programming course for CS and math/science majors, typically Freshman and Sophomores. Class size ~60)<br />
<br />
Our undergraduate computing environment is now largely<br />
PCs running Windows NT. We use NTEmacs as the programming<br />
environment with a slightly modified version of Emacs hugs<br />
mode with hugs running as a subprocess. The combined<br />
hugs/NTEmacs/Active Haskell distribution (available through<br />
course home page) is installed on 400+ public Win NT machines<br />
on campus and some unknown number of student-owned Win 95/98<br />
machines.<br />
<br />
This arrangement is new this semester, but so far has been<br />
working well. Keystroke-oriented interactive applications<br />
may be problematic with hugs running in NTEmacs shell mode.<br />
<br />
I'm planning assignments using Fran and Active Haskell and<br />
will try teaching the "brief introduction to imperative<br />
programming" at the end of the class using monads. I would<br />
be interested in talking with anyone who has experience or<br />
suggestions along these lines.<br />
<br />
I took a cue from Paul Hudak and others and have occasional<br />
appearances of MS Agents during lectures to wake students up!<br />
<br />
This is my first time teaching this course, and I would<br />
enjoy talking to others teaching at a similar level. A<br />
cursory search on the web didn't reveal many courses<br />
in this category.<br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:dave@cs.chalmers.se David Sands]<br />
University of Gothenburg & Chalmers University of Technology<br><br />
<b>Course:</b> Programmering för Naturvetare<br><br />
<b>Student background:</b> New students<br><br />
<b>Materials:</b> hugs 1.4; Simon Thompson<br><br />
<b>Web page:</b> http://www.md.chalmers.se/Cs/Grundutb/Kurser/nptah/<br><br />
<b>Comments:</b><br />
<blockquote><br />
This is the first part of a first course in programming. About 16<br />
lectures, each 2x45 mins plus weekly exercise classes and three<br />
assessed programming exercises. Most of my materials are in English.<br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:M.A.Rodrigues@dcs.hull.ac.uk Marcos A Rodrigues]<br />
The University of Hull, Hull, UK<br><br />
<b>Course:</b> Functional and Logic Programming<br><br />
<b>Student background:</b> none<br><br />
<b>Materials:</b> hugs 1.4; Haskell: the Craft of Functional Programming. Thompson S., Addison Wesley, 1996.<br><br />
<br />
<b>Instructor:</b> [mailto:Torsten.Grust@uni-konstanz.de Torsten Grust]<br />
University of Konstanz (Germany)<br> <br />
<b>Course:</b> Deklarative Programmierung (Declarative Programming, in german)<br><br />
<b>Student background:</b> basic math, no programming background required<br><br />
<b>Materials:</b> Hugs 1.4; (~300) slides available from the course web page;<br />
Jeroen Fokker's classroom text: Functional Programming<br />
http://www.cs.uu.nl/~jeroen/courses/fp-eng.ps.gz</a>;<br />
Richard Bird, Phil Wadler: Introduction to Functional Programming; Simon Peyton-Jones: Implementation of Functional Programming Languages<br><br />
<b>Web page:</b> http://www.fmi.uni-konstanz.de/dbis/Courses-old/Courses-ss98/decl-ss98.html<br><br />
<b>Comments:</b><br />
<blockquote><br />
The course is in German only (sorry about that). It additionally<br />
features an introduction to logical programming and Prolog.<br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:richardb@cse.unsw.edu.au Richard Buckland]<br />
University of New South Wales<br><br />
<b>Course:</b> Computing 1A<br><br />
<b>Student background:</b> Mixed, some have no computing<br />
background. This is our cs1 subject.<br><br />
<b>Materials:</b> Hugs 1.4; Simon Thompson<br><br />
<b>Web page:</b> http://www.cse.unsw.edu.au/~cs1011<br><br />
<br />
<br />
<b>Instructor:</b> [mailto:robert@techfak.uni-bielefeld Robert Giegerich], Stefan Posch, University Bielefeld, Germany<br><br />
<b>Course:</b> Introduction to Computer Science<br><br />
<b>Student background:</b> Completed High School (Abitur)<br><br />
<b>Materials:</b> Hugs; Class Notes by Robert Giegerich and Ralf Hinze<br><br />
<b>Comments:</b><br />
<blockquote><br />
Our first semester course<br />
uses Haskell as a vehicle to fundamental aspects of computation:<br />
algorithmics, specification and verification, efficiency analysis,<br />
programming methods. This works wonderfully. We do not require previous<br />
or additional programming experience. Haskell is quickly learned, <br />
to the necessary degreee; we make no attempt to cover the full language.<br />
This is NOT a Haskell course! Haskell allows us to speak about concepts<br />
of computer science WITHOUT a lot of language learning. And Haskell<br />
even helps to keep out detrimental habits from previous programming<br />
experience, as well as motivational problems resulting from the widely<br />
differing previous experiences of our incoming students.<br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:hj@sm.luth.se Håkan Jonsson] Luleå University of Technology, Sweden<br><br />
<b>Course:</b> SMD001, functional programming<br><br />
<b>Student background:</b> <br />
None. This is the very first programming course <br />
our students take.<br><br />
<b>Materials:</b> <br />
Materials: Simon Thompson's Haskell book + 7 laboratory/programming <br />
assignments using Hugs.<br />
<br><br />
<b>Web page:</b>http://www.sm.luth.se/csee/courses/smd/001/ (mostly Swedish)<br> <br />
<br />
<br />
<b>Instructor:</b> [mailto:Clem.Baker-Finch@cs.anu.edu.au Clem Baker-Finch, Australian National University<br><br />
<b>Course:</b>Introduction to Programming and Algorithms<br><br />
<b>Student background:</b> No programming background was<br />
assumed.<br />
<br><br />
<b>Materials:</b> GHC, GHCi, Simon Thompson 1st ed., my own materials. <br />
<br><br />
<b>Web page:</b> http://cs.anu.edu.au/Student/comp1100/<br> <br />
<b>Comments:</b><br />
<blockquote><br />
The first 75% of the course is basic programming concepts using Haskell. The remainder covers the same concepts in Java. This is reinforced - hopefully - by the third assignment (in Java) being the same as the first assignment (in Haskell). The aim is to provide a managed transition to the course which follows in second semester. Another point of possible interest is the use of a simple graphics library, ANUPlot, built on top of the OpenGL binding. See http://code.google.com/p/anuplot/<br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:lyndon@cs.uwa.edu.au Lyndon While] The University of Western Australia<br><br />
<b>Course:</b> Foundations of Computer Science<br><br />
<b>Student background:</b> None<br><br />
<b>Materials:</b> hugs 98; Thompson.<br><br />
<b>Web page:</b> http://undergraduate.cs.uwa.edu.au/courses/230.123<br><br />
<br />
<br />
<b>Instructor:</b> [http://www.cs.us.es/~jalonso José A. Alonso Jiménez] Dept of Computer Science and A.I., University of Seville, Spain<br><br />
<b>Course:</b> Informatics (Inform&aacute;tica, in spanish)<br><br />
<b>Student background:</b> None. This is the very first programming course <br />
our students take.<br><br />
<b>Materials:</b> GHCi, Emacs, Graham Hutton: &quot;Programming in Haskell&quot;, Slides, Exercises, Exams <br><br />
<b>Web page:</b> http://www.cs.us.es/~jalonso/cursos/i1m (in spanish)<br><br />
<b>First run:</b> 2009–2010<br><br />
<b>Last run:</b> 2012–2013<br />
<br />
----<br />
<br />
== Haskell as a second language ==<br />
<br />
These courses teach Haskell to students that have already learned<br />
another language.<br />
<br />
<b>Instructor:</b> [mailto:page@ou.edu Rex Page]<br />
University of Oklahoma<br><br />
<b>Course:</b> Discrete Mathematics<br><br />
<b>Student background:</b> High-school mathematics, introductory programming<br />
course (any language)<br><br />
<b>Materials:</b> Lecture notes, Projects, Exams, Solutions, Proof checking<br />
tools, etc.; text: Hall and O'Donnell, &quot;Discrete Mathematics with a<br />
Computer&quot;<br><br />
<br />
<b>Web page:</b> http://www.cs.ou.edu/~beseme/<br><br />
<b>Comments:</b><br />
<blockquote><br />
Lecture notes comprise over 350 animated slides (all both PowerPoint and<br />
PDF<br />
formats). About two-thirds of the material centers around mathematical logic.<br />
After the introduction of predicates, all of the examples in the logic<br />
portion<br />
of the course involve reasoning about properties of software, most of which is<br />
expressed in Haskell (a few are conventional looping functions).<br />
<p>Software examples include sum, sequence concatenation, logical operations on<br />
sequences, the Russian peasant algorithm, insertion and lookup in AVL <br />
trees, and<br />
other computations. Most of the properties verified relate to aspects of <br />
program<br />
correctness, but resource utilization properties are also verified in <br />
some<br />
cases. Several semesters worth of exams (finals and exams given during <br />
the term)<br />
are provided. The slides have matured through several offerings of the course.</p><br />
<p>The remaining third of the course discusses other standard topics<br />
in discrete<br />
mathematics, such as sets, functions, relations, trees, and counting.<br />
The web<br />
page provides access to a preview of the material. Exams and solutions are<br />
protected by a login procedure (to increase the comfort level of<br />
instructors<br />
wishing to use them in courses). The web page provides a link through<br />
which<br />
instructors may gain access to the full website.</p><br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:labra@lsi.uniovi.es Jose Emilio Labra Gayo],<br />
Dept. of Computer Science (EUITIO) University of Oviedo<br><br />
<b>Course:</b> Logic and Functional Programming<br><br />
<b>Student background:</b> The course is oriented towards third year undergraduate students in computer science. Usually, the students have been<br />
introduced to imperative languages like Pascal and Object <br />
Oriented Languages like C++<br><br />
<b>Materials:</b> Hugs; R. Bird "Introd. to FP using Haskell" (2nd Ed), J. E. Labra Gayo. "Introduction to the Haskell Language" (in spanish).<br><br />
<b>Web page:</b> http://lsi.uniovi.es/~labra/plf.html (in spanish).<br />
My FP page: http://lsi.uniovi.es/~labra/FuncProg.html<br><br />
<br />
<br />
<b>Instructor:</b> [mailto:fruehr@willamette.edu Fritz Ruehr]<br />
Willamette University, Salem, Oregon, USA (a small Liberal Arts College, about 1 hour from Portland & OGI)<br><br />
<b>Course:</b> CS 451 Topics in Computer Science: Functional Programming<br><br />
<b>Student background:</b> Data structures (I may also have required discrete math)<br><br />
<b>Materials:</b> Hugs 1.4 beta (I also taught Scheme); Haskell: The Craft of Functional Programming by Simon Thompson (I also used my own on-line lecture notes and labs and Kent Dybvig's text on Scheme)<br><br />
<b>Web page:</b> http://www.willamette.edu/~fruehr/451/<br><br />
<b>Comments:</b><br />
<blockquote><br />
The notes and labs I have on-line are in pretty rough form: many slide <br />
points are just one-line topical stubs I used as reminders in lecture.<br />
Many of the on-line materials are not linked into the (out of date)<br />
home page.<br />
<br />
I hope to have the course approved for next Fall as a regular offering<br />
(i.e., not as a "special topic") and should have more extensive<br />
on-line materials up by then.<br />
<br />
Teaching "bi-lingually" in Haskell and Scheme seemed like a good idea<br />
at the time, but next time around I will use Haskell as the main vehicle,<br />
perhaps taking some time near the end of the course to highlight some<br />
other languages (Scheme, ML, Clean).<br />
<br />
Some of my students used Conal Elliot's Fran and Paul Hudak's Haskore<br />
and liked them a lot; I was nice to have some significantly-sized<br />
applications that seemed more practical and fun to show off at the end<br />
of the course (I should have demonstrated these things at the beginning<br />
of the course to help with motivation). Next time around I would like to<br />
have a "beginner's prelude" or similar available to avoid problems with<br />
classes in type inference, Int vs. Integer, etc. These problems were a<br />
constant annoyance during lectures.<br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:J.Hamer@cs.auckland.ac.nz John Hamer],<br />
University of Auckland<br><br />
<b>Course:</b> Logic and Functional Programming<br><br />
<b>Student background:</b> Year 2 programming + some discrete maths<br><br />
<b>Materials:</b> Hugs 98, Haskell School of Expression, Page "Two Dozen Short Lessons in Haskell",<br><br />
<b>Web page:</b> http://www.cs.auckland.ac.nz/compsci360fc<br><br />
<br />
<br />
<b>Instructor:</b> [mailto:lengauer@fmi.uni-passau.de Chris Lengauer]<br />
University of Passau<br><br />
<b>Course:</b> Functional Programming<br><br />
<b>Student background:</b> two years of CS study<br><br />
<b>Materials:</b> hugs; Richard Bird's new text (PHI)<br><br />
<b>Web page:</b> not reachable from outside Passau<br><br />
<br />
<br />
<b>Instructor:</b> [mailto:cunningham@cs.olemiss.edu Conrad Cunningham]<br />
University of Mississippi<br><br />
<b>Course:</b> Functional Programming<br><br />
<b>Student background:</b> official -- senior or graduate standing; actual -- introductory programming, data structures, and discrete math<br><br />
<b>Materials:</b> Hugs on Unix and MS Windows systems;<br />
Mostly use the instructor's own set of lecture notes. Also Simon Thompson's HASKELL: THE CRAFT OF FUNCTIONAL PROGRAMMING. Previously used the Bird and Wadler textbook<br><br />
<b>Web page:</b> http://www.cs.olemiss.edu/~hcc/csci555/<br><br />
<b>Comments:</b><br />
<blockquote><br />
Although I am not a researcher in FP, I enjoy teaching the FP course.<br />
Most of the students take to the course after a few weeks. Hugs works<br />
reasonably well, but, of course, more pedagogically oriented error messages<br />
and other support tools would be helpful.<br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:leavens@cs.iastate.edu Gary T. Leavens],<br />
Iowa State University<br><br />
<b>Course:</b> Programming Languages 1<br><br />
<b>Student background:</b> undergraduate course in compilers or programming languaages<br><br />
<b>Materials:</b> Hugs 1.4; Thompson's Haskell: The Craft of Programming<br><br />
<b>Web page:</b> http://www.cs.iastate.edu/~leavens/ComS541.html<br><br />
<b>Comments:</b><br />
<blockquote><br />
Be sure to tell your students how to debug programs.<br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:jtod@dcs.gla.ac.uk John O'Donnell]<br />
University of Glasgow<br><br />
<b>Course:</b> Functional Programming<br><br />
<b>Student background:</b> Programming (in Ada), Algorithmic Foundations<br><br />
<b>Materials:</b> Hugs; Simon Thompson's book on Haskell<br><br />
<b>Web page:</b> http://www.dcs.gla.ac.uk/courses/teaching/level2/modules/#FP2<br><br />
<br />
<b>Instructor:</b> [mailto:chitil@informatik.rwth-aachen.de Olaf Chitil],<br />
RWTH Aachen, Germany<br><br />
<b>Course:</b> Functional Programming in Haskell<br><br />
<b>Student background:</b> basic programming skills (not necessarily in a<br />
functional language)<br><br />
<b>Materials:</b> Hugs 1.4; Hugs user manual, slide copies;<br />
additionally the `Gentle Introduction to Haskell', probably Bird's `Introduction<br />
to Functional Programming using Haskell' in the future.<br><br />
<b>Web page:</b> http://www-i2.informatik.rwth-aachen.de/Praktikum/SWP/ (in German)<br><br />
<b>Comments:</b><br />
<blockquote><br />
The course starts with 4 full time days of learning Haskell. During the semester<br />
the students (in groups of 2 students) have to implement a compiler and an<br />
abstract machine for a simple imperative language. They are given parts of the<br />
system and a manual on how to do the remaining parts (they have no prior<br />
knowledge on compiler construction).<br />
The most difficult construct for students to understand is the monad. I<br />
introduce IO without mentioning monads. Later I explain how to build a simple<br />
exception handling system based on the type `Maybe a' / `Error a'. Only<br />
subsequently I give the general definition of monads and present the list monad<br />
and a simple state monad. However, I fear that just to understand the bind<br />
operator `>>=' requires people to be quite comfortable with higher-order<br />
functions.<br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [http://web.comlab.ox.ac.uk/oucl/people/richard.bird.html Richard Bird], Oxford Brookes University<br><br />
<b>Course:</b> Functional Programming<br><br />
<b>Student background:</b> Elementary structured programming<br><br />
<b>Web page:</b> http://web.comlab.ox.ac.uk/oucl/courses/topics00-01/fp/<br><br />
<br />
<br />
<b>Instructor:</b> [mailto:paul.hudak@yale.edu Paul Hudak],<br />
Yale University, Dept of Computer Science<br><br />
<b>Course:</b> Functional Programming<br><br />
<b>Student background:</b> at least one programming course<br><br />
<b>Materials:</b> Hugs; my own textbook, which is under preparation<br><br />
<b>Web page:</b> none<br><br />
<br />
<br />
<b>Instructor:</b> [mailto:abf@cs.ucc.ie Alex Ferguson]<br />
University College Cork<br><br />
<b>Course:</b> Functional and Logic Programming<br><br />
<b>Student background:</b> Final year undergraduate<br />
<br><br />
<b>Materials:</b> Final year undergraduate<br />
Materials: Hugs 98; ghc; Simon Thompson, "Haskell: The Craft of<br />
Functional Programming" (2nd ed.)<br />
<br><br />
<b>Web page:</b> http://yeats.ucc.ie/~abf/CS4001/<br> <br />
<b>Comments:</b><br />
<blockquote><br />
This is the declarative programming option for 4th year<br />
undergrads, who have Java as a first programming language, and some<br />
knowledge of C and C++. The current final year have had some exposure<br />
to Haskell in first year, though this is no longer the case for our<br />
current intake.<br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:lky@nada.kth.se Leif Kusoffsky],<br />
Royal Institute of Technology, Stockholm<br><br />
<b>Course:</b> Functional Programming 2D1370<br><br />
<b>Student background:</b> The course is oriented towards third year<br />
undergraduate students in computer science. The students<br />
have been introduced to imperative languages like<br />
C and Object Oriented Languages like Java<br />
<br><br />
<b>Materials:</b> Hugs; Hudak : The Haskell School of Expression<br />
<br><br />
<br />
<br />
<b>Instructor:</b> Jeremy Bobbio -- INSIA<br><br />
<b>Course:</b> Functional and Logic Programming<br><br />
<b>Student background:</b> One year CS<br />
<br><br />
<b>Materials:</b> <br />
Hugs, GHC, Paul Hudak's Haskell School of Education<br />
<br><br />
<b>Web page:</b> http://etudiants.insia.org/~jbobbio/pafp/ (french)<br> <br />
<br />
<br />
<b>Instructor:</b> [mailto:antkaij@mit.jyu.fi Antti-Juhani Kaijanaho]<br />
University of Jyväskylä<br><br />
<b>Course:</b> Functional Programming 1 & 2<br><br />
<b>Student background:</b> third-year undergraduate and up<br />
<br><br />
<b>Materials:</b><br />
GHC, Gtk2HS<br />
<br><br />
<b>Web page:</b> [http://www.mit.jyu.fi/antkaij/opetus/fo/2005-2006/index.en.html]<br />
<br><br />
<b>Last run:</b> 2005&ndash;2006<br />
<br><br />
<!--<b>Comments:</b><br />
<blockquote><br />
(I'll write this later)<br />
</blockquote>--><br />
<br />
<b>Instructor:</b> [mailto:djd@comp.leeds.ac.uk David Duke]<br />
University of Leeds, School of Computing<br><br />
<b>Course:</b> Functional Programming<br><br />
<b>Student background:</b> Second and third year undergraduate<br />
<br><br />
<b>Materials:</b> ghc; Graham Hutton "Programming in Haskell"<br />
<br><br />
<b>Web page:</b> www.comp.leeds.ac.uk/se23/<br> <br />
<b>Comments:</b><br />
<blockquote><br />
This is an optional course that students currently can take in <br />
second or third year (from 2008/9 it will be third-years only).<br />
Students will have previously used Python and Java.<br />
Although the emphasis is on learning to solve problems within<br />
the functional paradigm, and how to develop solutions within<br />
Haskell, I also like to show students what is "under the<br />
bonnet" and conclude the module with an introduction to<br />
implementation issues, using material derived from<br />
"Implementing Functional Languages" by Simon Peyton Jones and <br />
David Lester. <br />
</blockquote><br />
<br />
<b>Instructor:</b> [mailto:popavdan@yahoo.com Popa V. Dan]<br />
University of Bacau, Romania <br><br />
<b>Course:</b> "Limbaje formale si automate" (Formal languages and automata) <br><br />
<b>Student background:</b> second-year undergraduate <br />
<br><br />
<b>Materials:</b> Hugs 98 (2002 revised version) included in Mandriva (Formely Mandrake) 10.0 Linux Distribution<br />
<br><br />
<b>Web page:</b> Not yet. Try the page of the "ro" community on www.haskell.org<br />
<br> [http://www.haskell.org/haskellwiki/Ro/Haskell Ro/Haskell webpage is here] <br><br />
<b>First run:</b> 2006&ndash;2007<br />
<br><br />
<br />
Haskell is used as an implementation languages in student's laboratories.<br />
The ideea was to provide a language powerfull enough to be able to express <br />
how to build a parser starting from a grammmar. The students are able<br />
to build small (monadic) interpreters for "while-languages" using a <br />
recommanded monad and a recommanded back-end. The labs are focusing on the <br />
grammar of the languages, on the modular (monadic) parsing as a tool for <br />
verifying and processing inputs which are not validable by finite state <br />
automata but by context free grammmars. Adaptability of the language, <br />
especially obtained manipulating and improving syntax is also a target.<br />
<br />
Support (concerning Haskell): "O introducere in Haskell prin exemple" by<br />
Dan Popa, published in january 31,2007 by <br />
[http://www.edusoft.ro Edusoft](in romanian) Contact the author if needed .<br />
<br />
Other recommanded books: "Gentle Introd to Haskell 98" and YAHT <br />
Recomanded papers: All about monadic parsing. <br />
Special message for Graham Hutton, Erik Meijer and P. Wadler and all <br />
other authors with similar interests from the Haskell <br />
community:<br />
<br />
Thank you very much for your papers concerning Monadic parsing and <br />
interpreters ! <br />
<br />
<br />
'''Course:''' Programming Paradigms <br><br />
'''Student background:''' This is a second-year undergraduate course. Students have already been introduced to basic structured programming concepts <br><br />
<br />
----<br />
<br />
== Comparative programming languages ==<br />
<br />
These courses teach general programming language principles, with<br />
Haskell as an example of a functional language.<br />
<br />
<b>Instructor: </b> Ruediger Marcus Flaig, University of Heidelberg (Germany)<br />
<br><br />
<b>Course:</b> An introduction to programming in bioinformatics <br><br />
<b>Student background:</b> different, but generally low<br><br />
<b>Materials:</b> Hugs-98 and lots of other stuff<br />
<br><br />
<b>Web page:</b> http://www.sanctacaris.net/rc.html<br> <br />
<b>Comments:</b><br />
<blockquote><br />
This course is designed to introduce life science students,<br />
that is to say, going-to-be biologists, physicians, biotechnologists<br />
and maybe others, to solving real-life problems (such as DNA sequence<br />
handling and analysis). Emphasis will be on paradigms (imperative /<br />
OO, functional, declarative). Although -- in order not to frighten<br />
people -- the official announcement mentions only Python, Haskell will<br />
be presented as THE purely functional language, and all solutions may<br />
be presented in either Python, Haskell or Java. I am very curious<br />
about the feedback I'll get, and maybe next term we shall focus more<br />
on Haskell. What I'd really need, though, is some life science related<br />
package for Haskell, such as BIOPYTHON and BIORUBY. <br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:ham@cs.utexas.edu Hamilton Richards],<br />
University of Texas (Austin)<br><br />
<b>Course:</b> Programming Languages (taught in 2005)<br><br />
<b>Student background:</b> <br><br />
<b>Materials:</b> Hugs 1.4; Sethi, Davie.<br><br />
<b>Web page:</b> http://www.cs.utexas.edu/users/ham/UTCS/CS345/<br><br />
<b>Comments:</b><br />
<blockquote><br />
I'm using Haskell in a programming-languages course, but it's distributed<br />
somewhat piecemeal through the course. Probably adds up to something like<br />
3-4 weeks (out of 15).<br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [http://www.cs.waikato.ac.nz/~marku Mark Utting]<br />
University of Waikato (New Zealand)<br />
<b>Course:</b> Programming Languages<br><br />
<b>Student background:</b> Two years of C++ and 1 year of Haskell<br><br />
<b>Materials:</b> Textbook "Programming Languages", Louden.<br />
<b>Web page:</b> http://www.cs.waikato.ac.nz/~marku/313<br><br />
<b>Comments:</b><br />
<blockquote><br />
The course covers at least two languages in each of the<br />
main paradigms (object-oriented, functional and logic programming),<br />
plus history, semantics and implementation issues.<br />
The Haskell section is about 2 weeks long and usually focusses on <br />
programming with higher-order functions and how that enables the<br />
language to be extended in application-specific ways<br />
(parser combinators, html-generation combinators etc.)<br />
</blockquote><br />
<br />
<b>Instructor:</b> [mailto:zeeshan@apiit.edu.pk M Zeeshan Ali Ansari],<br />
Asia Pacific Institute of Information Technology (Pakistan)<br><br />
<b>Course:</b> Advanced Programming Language Concepts<br><br />
<b>Student background:</b> Students having studied and worked on Imperative Programming Languages <br><br />
<b>Materials:</b> The Craft of Haskell, A Gentle Introduction to Haskell, Yet Another Haskell Tutorial.<br><br />
<b>Web page:</b> http://www.apiit.edu.pk<br><br />
<b>Comments:</b><br />
<blockquote><br />
This course compares and contrasts various programming language paradigms including Functional Programming. Out of 13 week course 5 to 6 of them are dedicated towards Haskell. The material is basically written in a way that enables imperative language programmers to understand the concepts and power of functional programming <br />
<br />
http://www.haskell.org/sitewiki/images/3/3d/Functional_Programming_Tutorial_By_Zeeshan_Ali_Ansari.doc<br />
<br />
<br />
</blockquote><br />
<br />
<b>Instructor:</b> John C. Mitchell,<br />
Stanford University<br><br />
<b>Course:</b> Programming Languages<br><br />
<b>Student background:</b> Some experience with Lisp/C/object-oriented languages.<br><br />
<b>Materials:</b> Concepts in Programming Languages (new Haskell chapters written with Kathleen Fisher)<br><br />
<b>Web page:</b> http://cs242.stanford.edu<br><br />
<b>Comments:</b><br />
<blockquote><br />
Central concepts in modern programming languages, impact on software development, language design trade-offs, and implementation considerations. Functional, imperative, and object-oriented paradigms. Formal semantic methods and program analysis. Modern type systems, higher order functions and closures, exceptions and continuations. Modularity, object-oriented languages, and concurrency. Runtime support for language features, interoperability, and security issues. <br />
</blockquote><br />
<br />
----<br />
<br />
== Advanced functional programming using Haskell ==<br />
<br />
These courses deal with the advanced issues such as semantics, type<br />
systems, or compilers. Includes a other advanced courses taught using<br />
Haskell. <br />
<br />
<b>Instructor:</b> [mailto:gmh@cs.nott.ac.uk Graham Hutton]<br />
School of Computer Science, University of Nottingham<br><br />
<b>Course:</b> Advanced Functional Programming<br><br />
<b>Student background:</b> At least one year of CS, including a course in Haskell<br><br />
<b>Materials:</b> Hugs; GHC; Graham Hutton, Programming in Haskell; own course material<br><br />
<b>Web page:</b> http://www.cs.nott.ac.uk/~gmh/afp.html<br />
<br />
<b>Instructor:</b> [mailto:rjmh@cs.chalmers.se John Hughes]<br />
Chalmers University, Gothenburg<br><br />
<b>Course:</b> Advanced Functional Programming<br><br />
<b>Student background:</b> General CS maturity; from this year most students have already used Haskell in introductory courses.<br><br />
<b>Materials:</b> Mainly hbc.; Papers (see web page)<br><br />
<b>Web page:</b> http://www.cs.chalmers.se/~rjmh/AFP<br><br />
<b>Comments:</b><br />
<blockquote><br />
The goal is to teach students how to solve substantial problems in a<br />
functional language --- `functional programming in anger', one might say. The<br />
emphasis is on design and use of suitable combinator libraries to simplify<br />
applications. Material covered includes monad design, use of CPS style,<br />
libraries for parsing, pretty-printing, and GUIs (presently fudgets). <br />
<br />
The course is taught in a `problem based' manner: lectures are few, while<br />
students solve three substantial programming problems during the term, with<br />
plenty of backup via group meetings. I adopted this teaching form three years<br />
ago, and it has led students to develop far better practical skills than most<br />
obtained from my earlier `lectures and exercises' courses, and I believe to<br />
use Haskell much more after the course's end.<br />
<br />
This course is optional in the third or fourth year, and is taken by a<br />
small-to-medium sized group of students.<br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:Olof.Johanssson@cs.umu.se Olof Johansson], Umeå Univesity, Department of Computing Science<br><br />
<b>Course:</b> Programming language semantics<br><br />
<b>Student background:</b> two terms of computer science studies and specificaly a course Programming language concepts<br><br />
<b>Materials:</b> Hugs and some HBC and GHC; Watt, Programming language, Syntax and Semantics<br><br />
<b>Web page:</b> http://www.cs.umu.se/local/kurser/TDBC05 (Only in swedish)<br> <br />
<br />
<br />
<b>Instructor:</b> [mailto:lyndon@cs.uwa.edu.au Lyndon While]<br />
The University of Western Australia<br><br />
<b>Course:</b> Functional Programming<br><br />
<b>Student background:</b> OOP, plus most of them have used Haskell previously<br><br />
<b>Materials:</b> hugs 98; none of the recent books really fit<br><br />
<b>Web page:</b> http://undergraduate.cs.uwa.edu.au/courses/230.301<br><br />
<b>Instructor:</b> [mailto:F.A.Rabhi@dcs.hull.ac.uk Fethi Rabhi],<br />
University of Hull (UK)<br><br />
<b>Course:</b> AI Problem Solving Techniques (using Haskell and Prolog)<br><br />
<b>Student background:</b> Haskell and Prolog programming<br><br />
<b>Materials:</b> HUGS; Thompson'96, own notes (soon to be published as a book).<br><br />
<b>Web page:</b> none<br><br />
<b>Comments:</b><br />
<blockquote><br />
It is very hard to justify learning Haskell unless it can be<br />
demonstrated in very practical situations (hence the provision<br />
of the above course).<br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:karczma@info.unicaen.fr Jerzy Karczmarczuk]<br />
University of Caen, Caen (France)<br> No links in the fr-Haskell page. Why not ?<br />
<b>Course:</b> Compilation<br><br />
<b>Student background:</b> General CS knowledge; students (should...) know Scheme and imperative languages, also some theory of languages and automata.<br><br />
<b>Materials:</b> <br />
Hugs, GHC, now also GHCi, and their documentation. Handouts: (still a little incomplete)<br />
Impossible to find the foolowing matterials.Files can not be found. <br />
* http://users.info.unicaen.fr/~karczma/matrs/Maitcomp/compilation_a.pdf<br />
* http://users.info.unicaen.fr/~karczma/matrs/Maitcomp/compilation_b.pdf<br />
* http://users.info.unicaen.fr/~karczma/matrs/Maitcomp/compilation_c.pdf<br />
<b>Comments:</b><br />
<blockquote><br />
This is a compulsory semestrial course in fourth year. Weekly: 1.5h<br />
course, 2.5H practice.<br />
One, but comprehensive assignment, taking 2 months or more.<br />
askell is our main coding tool. A little time is devoted by necessity<br />
to the language<br />
itself, but also from the perspective: "how would you compile such a<br />
language".<br />
"Standard stuff", such as parsing combinators, etc.is covered, but we<br />
don't begin with that.<br />
We start with the construction of small interpreters: from recursive<br />
Lisp-style to postfix,<br />
(Forth/PostScript style) constructing this last by partial evaluation<br />
(intuitively).<br />
We introduce control structures as lazy functions, operation<br />
sequencing through continuations,<br />
monads not only for parsing, but also for exceptions and<br />
non-determinism.<br />
We discuss (simply) the type inference. The code generator assembles a<br />
linear code by lazy<br />
concatenation of chunks which makes it trivial to deal with loops and<br />
cross-referencing<br />
fragments. Algorithms of garbage collection are presented (not<br />
implemented, though...) in<br />
a purely functional style.<br />
<br />
Students' opinion: "Frightening at first. Learning curve steep, but<br />
much less time spent on debugging, coding proficiency comes fast. Good for<br />
understanding what the compilation is about, but difficult to make a<br />
complete running program with all the I/O, etc.<br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:jeffm@cse.uconn.edu Jeffrey A. Meunier], University of Connecticut<br><br />
<b>Course:</b> CSE240 Intermediate Computer Systems<br><br />
<b>Student background:</b> computer/microprocessor organization<br />
<br><br />
<b>Materials:</b> Hugs (Feb 2001); Bird ``Introduction to Functional<br />
Programming''; Furber ``ARM System-on-Chip Architecture''<br />
<br><br />
<b>Web page:</b> http://www.engr.uconn.edu/~jeffm/Classes/CSE240-Spring-2001/index.html<br> <br />
<b>Comments:</b><br />
<blockquote><br />
This is a course in the low level programming of microprocessor systems.<br />
The course will focus on the development of an emulator (virtual<br />
machine, or VM) for a small computer system based on a modern RISC<br />
microprocessor (the ARM CPU) using a high level programming language<br />
(Haskell), and assembly language programming of the VM. Development of<br />
the VM will occur in stages, starting with the simple direct-execution<br />
(stream-based) model, gradually moving to a more realistic memory-mapped<br />
model, including exception handlers, concurrent processes, and<br />
asynchronous external devices.<br />
</blockquote><br />
<br />
<b>Instructor:</b> Gabriele Keller<br />
The University of New South Wales<br><br />
<b>Course:</b> Concepts of Programming Languages<br><br />
<b>Student background:</b> Most of them have used Haskell in first year<br><br />
<b>Materials:</b> GHC, TaPL and `Programming Languages: Theory and Practice', papers<br><br />
<b>Web page:</b> http://www.cse.unsw.edu.au/~cs3161<br><br />
<b>Last run:</b> 2006<br><br />
<b>Comments:</b><br />
<blockquote><br />
Expose students to a theory of programming languages based on type<br />
theory and operational semantics as a mathematically sound framework<br />
which allows us to investigate the properties of a large number of<br />
programming language features, including:<br />
<br />
* on semantics of different programming languages and programming paradigms: imperative, object oriented, and declarative.<br />
* theoretical foundations of programming languages: syntax, operatational, axiomatic and denotational semantics.<br />
* implementation aspects of central language features, such as dynamic and strong typing, polymorphism, overloading and automatic memory management<br />
<br />
Assignments are in GHC/Haskell, and in the past have included implementing a<br />
mini-Haskell type checker, type inference and interpreter.<br />
</blockquote><br />
<br />
<b>Instructor:</b> Manuel Chakravarty<br />
The University of New South Wales<br><br />
<b>Course:</b> Advanced Functional Programming<br><br />
<b>Student background:</b> Most of them have used Haskell in first year<br><br />
<b>Materials:</b> GHC, papers (see the website)<br><br />
<b>Web page:</b> http://www.cse.unsw.edu.au/~cs4132<br><br />
<b>Last run:</b>2004<br><br />
<b>Comments:</b><br />
<blockquote><br />
To provide students with an understanding of the theory and practice of<br />
the design, use, and implementation of functional programming languages,<br />
such as Haskell<br />
<br />
This includes selected topics from the following areas:<br />
<br />
* Foundations: lambda calculus, semantics, and type systems.<br />
* Design: side-effects, exceptions, concurrency, and parallelism.<br />
* Implementation: abstract machines, program transformation, and memory management. <br />
* Programming techniques: combinator libraries, monads, generic programming, and meta programming.<br />
* Applications: domain specific languages, graphics, web programming, reactive systems, and scientific programming.<br />
</blockquote><br />
<br />
[[Category:Community]]</div>Aivanhttps://wiki.haskell.org/index.php?title=Haskell_in_education&diff=55916Haskell in education2013-05-13T14:46:40Z<p>Aivan: /* Haskell as a second language */</p>
<hr />
<div>[[Category:Education]]<br />
This is a collection of material of interest to those teaching or<br />
taking courses that use Haskell. There is also a more general site,<br />
http://www.cs.kun.nl/fple/, devoted to all functional languages. The proceedings of the latest<br />
[http://www.informatik.uni-kiel.de/~mh/publications/reports/fdpe02/ International Workshop on Functional and Declarative Programming in Education (FDPE)] are now available.<br />
Some of the lecture notes and<br />
other course material found in these web pages are excellent<br />
supplements to the available text books.<br />
If you would like to use lecture<br />
notes, assignments, or other material found in these course web pages<br />
please contact the author for permission.<br />
<br />
Most of the entries are years old. When you add your own new<br />
material to this page, please also say when the course was run for the last time.<br />
<br />
The results of a survey of university courses using Haskell in the academic year 2005-2006 can be found [http://www.cs.chalmers.se/~rjmh/Wash/Survey/teaching.htm here]. Also, some news were added during the 2006-2007 academic year.<br />
<br />
== Suitable Course Textbooks ==<br />
<br />
See [[Books#Textbooks]].<br />
<br />
== Haskell as a first language ==<br />
<br />
These courses teach Haskell to students with no background in programming.<br />
<br />
<b>Instructor:</b> [http://homepages.inf.ed.ac.uk/wadler/ Philip Wadler] University of Edinburgh<br><br />
<b>Course:</b> [[Informatics 1 - Functional Programming]]<br><br />
<b>Materials:</b> GHCi, Emacs, Thompson: Haskell, the Craft of Functional Programming<br><br />
<b>Web page:</b> http://www.inf.ed.ac.uk/teaching/courses/inf1/fp/ <br><br />
<br />
<br />
<b>Instructor:</b> [mailto:page@ou.edu Rex Page] <br />
University of<br />
Oklahoma<br><br />
<b>Course:</b> Introduction to Computer Programming<br><br />
<b>Student background:</b> High-school mathematics<br><br />
<b>Materials:</b> Projects, Exams, Downloadable textbook: Rex Page, <br />
&quot;Two<br />
Dozen Short Lessons in Haskell&quot;<br><br />
<b>Web page:</b> http://www.cs.ou.edu/~rlpage/fpclassSpring97/<br />
<br />
<b>Comments:</b><br />
<blockquote><br />
These materials arose from a course offered for three consecutive<br />
semesters as<br />
an alternative to our usual first course in programming. Most of the<br />
students<br />
who took the course graduated in the past two years, and many of them<br />
cited it<br />
in the exit interview with the department chair as the most influential<br />
course<br />
in the entire academic career.<br />
<p>All materials for two offerings of the course are available through<br />
the web<br />
page. This includes individual projects, team projects, project<br />
solutions,<br />
exams, supplied software (connected with certain projects), tips for<br />
students<br />
taking the course, FAQs addressing questions that students asked during<br />
the<br />
semester, and a short textbook which served as the primary text in the<br />
course.</p><br />
<p>The first 10 to 11 weeks of the course use Haskell. Students are<br />
required to<br />
write nine programs in Haskell, three of which are team projects that<br />
combine<br />
software developed in individual projects. Different members of a team<br />
are<br />
assigned different individual projects, and the team efforts combine<br />
their<br />
solutions into a working piece of software.</p><br />
<p>In the early part of the course, students use operators like map,<br />
foldr, zip,<br />
and iterate to express computations. Explicit recursion is introduced<br />
after some<br />
experience with these common patterns of computation. Examples and<br />
problems<br />
address non-numeric applications, for the most part. Both interactive<br />
and file<br />
I/O are covered, but general purpose monads are not.</p><br />
<p>The last 5 to 6 weeks of the course use C, and most of the projects<br />
in that<br />
part of the course duplicate the function of earlier pieces of software<br />
that the<br />
students have written in Haskell.</p><br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:Jonathan.Hill@comlab.ox.ac.uk Jonathan Hill]<br />
Oxford University Computing Laboratory<br><br />
<b>Course:</b> Functional Programming for the Integrated Graduate Development Programme in Software Engineering at Oxford University.<br><br />
<b>Student background:</b> Discrete mathematics (the course is a part time MSc for people from industry; most are from IBM or Nortel).<br><br />
<b>Materials:</b> Gofer (an old version, with a stripped down prelude---no parameter classes!); Own course material<br><br />
<b>Web page:</b> http://www.comlab.ox.ac.uk/igdp/text/course06.html<br />
Note: Web pages not accessible. May be ... moved ? <br />
<br />
<br />
<b>Instructor:</b> [mailto:nxg@cs.nott.ac.uk Neil Ghani]<br />
School of Computer Science, University of Nottingham<br><br />
<b>Course:</b> Functional Programming<br><br />
<b>Student background:</b> None<br><br />
<b>Materials:</b> Hugs; Graham Hutton, Programming in Haskell; own lecture slides<br><br />
<b>Web page:</b> http://www.cs.nott.ac.uk/~nxg/G51FUN06/fun.html<br />
<br />
<b>Instructor:</b> [mailto:prins@cs.unc.edu" Jan Prins]<br />
UNC Chapel Hill<br><br />
<b>Course:</b> Introduction to Functional Programming<br><br />
<b>Student background:</b> solid background in high-school science and mathematics<br><br />
<b>Materials:</b> Hugs 1.4 incl. Active Haskell, FRAN and [[Haskore]]; Simon Thompson, "Haskell: The Art of Functional Programming"<br><br />
<b>Web page:</b> http://www.cs.unc.edu/~prins/Classes/15/<br><br />
<b>Comments:</b><br />
<blockquote><br />
(Introductory programming course for CS and math/science majors, typically Freshman and Sophomores. Class size ~60)<br />
<br />
Our undergraduate computing environment is now largely<br />
PCs running Windows NT. We use NTEmacs as the programming<br />
environment with a slightly modified version of Emacs hugs<br />
mode with hugs running as a subprocess. The combined<br />
hugs/NTEmacs/Active Haskell distribution (available through<br />
course home page) is installed on 400+ public Win NT machines<br />
on campus and some unknown number of student-owned Win 95/98<br />
machines.<br />
<br />
This arrangement is new this semester, but so far has been<br />
working well. Keystroke-oriented interactive applications<br />
may be problematic with hugs running in NTEmacs shell mode.<br />
<br />
I'm planning assignments using Fran and Active Haskell and<br />
will try teaching the "brief introduction to imperative<br />
programming" at the end of the class using monads. I would<br />
be interested in talking with anyone who has experience or<br />
suggestions along these lines.<br />
<br />
I took a cue from Paul Hudak and others and have occasional<br />
appearances of MS Agents during lectures to wake students up!<br />
<br />
This is my first time teaching this course, and I would<br />
enjoy talking to others teaching at a similar level. A<br />
cursory search on the web didn't reveal many courses<br />
in this category.<br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:dave@cs.chalmers.se David Sands]<br />
University of Gothenburg & Chalmers University of Technology<br><br />
<b>Course:</b> Programmering för Naturvetare<br><br />
<b>Student background:</b> New students<br><br />
<b>Materials:</b> hugs 1.4; Simon Thompson<br><br />
<b>Web page:</b> http://www.md.chalmers.se/Cs/Grundutb/Kurser/nptah/<br><br />
<b>Comments:</b><br />
<blockquote><br />
This is the first part of a first course in programming. About 16<br />
lectures, each 2x45 mins plus weekly exercise classes and three<br />
assessed programming exercises. Most of my materials are in English.<br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:M.A.Rodrigues@dcs.hull.ac.uk Marcos A Rodrigues]<br />
The University of Hull, Hull, UK<br><br />
<b>Course:</b> Functional and Logic Programming<br><br />
<b>Student background:</b> none<br><br />
<b>Materials:</b> hugs 1.4; Haskell: the Craft of Functional Programming. Thompson S., Addison Wesley, 1996.<br><br />
<br />
<b>Instructor:</b> [mailto:Torsten.Grust@uni-konstanz.de Torsten Grust]<br />
University of Konstanz (Germany)<br> <br />
<b>Course:</b> Deklarative Programmierung (Declarative Programming, in german)<br><br />
<b>Student background:</b> basic math, no programming background required<br><br />
<b>Materials:</b> Hugs 1.4; (~300) slides available from the course web page;<br />
Jeroen Fokker's classroom text: Functional Programming<br />
http://www.cs.uu.nl/~jeroen/courses/fp-eng.ps.gz</a>;<br />
Richard Bird, Phil Wadler: Introduction to Functional Programming; Simon Peyton-Jones: Implementation of Functional Programming Languages<br><br />
<b>Web page:</b> http://www.fmi.uni-konstanz.de/dbis/Courses-old/Courses-ss98/decl-ss98.html<br><br />
<b>Comments:</b><br />
<blockquote><br />
The course is in German only (sorry about that). It additionally<br />
features an introduction to logical programming and Prolog.<br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:richardb@cse.unsw.edu.au Richard Buckland]<br />
University of New South Wales<br><br />
<b>Course:</b> Computing 1A<br><br />
<b>Student background:</b> Mixed, some have no computing<br />
background. This is our cs1 subject.<br><br />
<b>Materials:</b> Hugs 1.4; Simon Thompson<br><br />
<b>Web page:</b> http://www.cse.unsw.edu.au/~cs1011<br><br />
<br />
<br />
<b>Instructor:</b> [mailto:robert@techfak.uni-bielefeld Robert Giegerich], Stefan Posch, University Bielefeld, Germany<br><br />
<b>Course:</b> Introduction to Computer Science<br><br />
<b>Student background:</b> Completed High School (Abitur)<br><br />
<b>Materials:</b> Hugs; Class Notes by Robert Giegerich and Ralf Hinze<br><br />
<b>Comments:</b><br />
<blockquote><br />
Our first semester course<br />
uses Haskell as a vehicle to fundamental aspects of computation:<br />
algorithmics, specification and verification, efficiency analysis,<br />
programming methods. This works wonderfully. We do not require previous<br />
or additional programming experience. Haskell is quickly learned, <br />
to the necessary degreee; we make no attempt to cover the full language.<br />
This is NOT a Haskell course! Haskell allows us to speak about concepts<br />
of computer science WITHOUT a lot of language learning. And Haskell<br />
even helps to keep out detrimental habits from previous programming<br />
experience, as well as motivational problems resulting from the widely<br />
differing previous experiences of our incoming students.<br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:hj@sm.luth.se Håkan Jonsson] Luleå University of Technology, Sweden<br><br />
<b>Course:</b> SMD001, functional programming<br><br />
<b>Student background:</b> <br />
None. This is the very first programming course <br />
our students take.<br><br />
<b>Materials:</b> <br />
Materials: Simon Thompson's Haskell book + 7 laboratory/programming <br />
assignments using Hugs.<br />
<br><br />
<b>Web page:</b>http://www.sm.luth.se/csee/courses/smd/001/ (mostly Swedish)<br> <br />
<br />
<br />
<b>Instructor:</b> [mailto:Clem.Baker-Finch@cs.anu.edu.au Clem Baker-Finch, Australian National University<br><br />
<b>Course:</b>Introduction to Programming and Algorithms<br><br />
<b>Student background:</b> No programming background was<br />
assumed.<br />
<br><br />
<b>Materials:</b> GHC, GHCi, Simon Thompson 1st ed., my own materials. <br />
<br><br />
<b>Web page:</b> http://cs.anu.edu.au/Student/comp1100/<br> <br />
<b>Comments:</b><br />
<blockquote><br />
The first 75% of the course is basic programming concepts using Haskell. The remainder covers the same concepts in Java. This is reinforced - hopefully - by the third assignment (in Java) being the same as the first assignment (in Haskell). The aim is to provide a managed transition to the course which follows in second semester. Another point of possible interest is the use of a simple graphics library, ANUPlot, built on top of the OpenGL binding. See http://code.google.com/p/anuplot/<br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:lyndon@cs.uwa.edu.au Lyndon While] The University of Western Australia<br><br />
<b>Course:</b> Foundations of Computer Science<br><br />
<b>Student background:</b> None<br><br />
<b>Materials:</b> hugs 98; Thompson.<br><br />
<b>Web page:</b> http://undergraduate.cs.uwa.edu.au/courses/230.123<br><br />
<br />
<br />
<b>Instructor:</b> [http://www.cs.us.es/~jalonso José A. Alonso Jiménez] Dept of Computer Science and A.I., University of Seville, Spain<br><br />
<b>Course:</b> Informatics (Inform&aacute;tica, in spanish)<br><br />
<b>Student background:</b> None. This is the very first programming course <br />
our students take.<br><br />
<b>Materials:</b> GHCi, Emacs, Graham Hutton: &quot;Programming in Haskell&quot;, Slides, Exercises, Exams <br><br />
<b>Web page:</b> http://www.cs.us.es/~jalonso/cursos/i1m (in spanish)<br><br />
<b>First run:</b> 2009–2010<br><br />
<b>Last run:</b> 2012–2013<br />
<br />
----<br />
<br />
== Haskell as a second language ==<br />
<br />
These courses teach Haskell to students that have already learned<br />
another language.<br />
<br />
<b>Instructor:</b> [mailto:page@ou.edu Rex Page]<br />
University of Oklahoma<br><br />
<b>Course:</b> Discrete Mathematics<br><br />
<b>Student background:</b> High-school mathematics, introductory programming<br />
course (any language)<br><br />
<b>Materials:</b> Lecture notes, Projects, Exams, Solutions, Proof checking<br />
tools, etc.; text: Hall and O'Donnell, &quot;Discrete Mathematics with a<br />
Computer&quot;<br><br />
<br />
<b>Web page:</b> http://www.cs.ou.edu/~beseme/<br><br />
<b>Comments:</b><br />
<blockquote><br />
Lecture notes comprise over 350 animated slides (all both PowerPoint and<br />
PDF<br />
formats). About two-thirds of the material centers around mathematical logic.<br />
After the introduction of predicates, all of the examples in the logic<br />
portion<br />
of the course involve reasoning about properties of software, most of which is<br />
expressed in Haskell (a few are conventional looping functions).<br />
<p>Software examples include sum, sequence concatenation, logical operations on<br />
sequences, the Russian peasant algorithm, insertion and lookup in AVL <br />
trees, and<br />
other computations. Most of the properties verified relate to aspects of <br />
program<br />
correctness, but resource utilization properties are also verified in <br />
some<br />
cases. Several semesters worth of exams (finals and exams given during <br />
the term)<br />
are provided. The slides have matured through several offerings of the course.</p><br />
<p>The remaining third of the course discusses other standard topics<br />
in discrete<br />
mathematics, such as sets, functions, relations, trees, and counting.<br />
The web<br />
page provides access to a preview of the material. Exams and solutions are<br />
protected by a login procedure (to increase the comfort level of<br />
instructors<br />
wishing to use them in courses). The web page provides a link through<br />
which<br />
instructors may gain access to the full website.</p><br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:labra@lsi.uniovi.es Jose Emilio Labra Gayo],<br />
Dept. of Computer Science (EUITIO) University of Oviedo<br><br />
<b>Course:</b> Logic and Functional Programming<br><br />
<b>Student background:</b> The course is oriented towards third year undergraduate students in computer science. Usually, the students have been<br />
introduced to imperative languages like Pascal and Object <br />
Oriented Languages like C++<br><br />
<b>Materials:</b> Hugs; R. Bird "Introd. to FP using Haskell" (2nd Ed), J. E. Labra Gayo. "Introduction to the Haskell Language" (in spanish).<br><br />
<b>Web page:</b> http://lsi.uniovi.es/~labra/plf.html (in spanish).<br />
My FP page: http://lsi.uniovi.es/~labra/FuncProg.html<br><br />
<br />
<br />
<b>Instructor:</b> [mailto:fruehr@willamette.edu Fritz Ruehr]<br />
Willamette University, Salem, Oregon, USA (a small Liberal Arts College, about 1 hour from Portland & OGI)<br><br />
<b>Course:</b> CS 451 Topics in Computer Science: Functional Programming<br><br />
<b>Student background:</b> Data structures (I may also have required discrete math)<br><br />
<b>Materials:</b> Hugs 1.4 beta (I also taught Scheme); Haskell: The Craft of Functional Programming by Simon Thompson (I also used my own on-line lecture notes and labs and Kent Dybvig's text on Scheme)<br><br />
<b>Web page:</b> http://www.willamette.edu/~fruehr/451/<br><br />
<b>Comments:</b><br />
<blockquote><br />
The notes and labs I have on-line are in pretty rough form: many slide <br />
points are just one-line topical stubs I used as reminders in lecture.<br />
Many of the on-line materials are not linked into the (out of date)<br />
home page.<br />
<br />
I hope to have the course approved for next Fall as a regular offering<br />
(i.e., not as a "special topic") and should have more extensive<br />
on-line materials up by then.<br />
<br />
Teaching "bi-lingually" in Haskell and Scheme seemed like a good idea<br />
at the time, but next time around I will use Haskell as the main vehicle,<br />
perhaps taking some time near the end of the course to highlight some<br />
other languages (Scheme, ML, Clean).<br />
<br />
Some of my students used Conal Elliot's Fran and Paul Hudak's Haskore<br />
and liked them a lot; I was nice to have some significantly-sized<br />
applications that seemed more practical and fun to show off at the end<br />
of the course (I should have demonstrated these things at the beginning<br />
of the course to help with motivation). Next time around I would like to<br />
have a "beginner's prelude" or similar available to avoid problems with<br />
classes in type inference, Int vs. Integer, etc. These problems were a<br />
constant annoyance during lectures.<br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:J.Hamer@cs.auckland.ac.nz John Hamer],<br />
University of Auckland<br><br />
<b>Course:</b> Logic and Functional Programming<br><br />
<b>Student background:</b> Year 2 programming + some discrete maths<br><br />
<b>Materials:</b> Hugs 98, Haskell School of Expression, Page "Two Dozen Short Lessons in Haskell",<br><br />
<b>Web page:</b> http://www.cs.auckland.ac.nz/compsci360fc<br><br />
<br />
<br />
<b>Instructor:</b> [mailto:lengauer@fmi.uni-passau.de Chris Lengauer]<br />
University of Passau<br><br />
<b>Course:</b> Functional Programming<br><br />
<b>Student background:</b> two years of CS study<br><br />
<b>Materials:</b> hugs; Richard Bird's new text (PHI)<br><br />
<b>Web page:</b> not reachable from outside Passau<br><br />
<br />
<br />
<b>Instructor:</b> [mailto:cunningham@cs.olemiss.edu Conrad Cunningham]<br />
University of Mississippi<br><br />
<b>Course:</b> Functional Programming<br><br />
<b>Student background:</b> official -- senior or graduate standing; actual -- introductory programming, data structures, and discrete math<br><br />
<b>Materials:</b> Hugs on Unix and MS Windows systems;<br />
Mostly use the instructor's own set of lecture notes. Also Simon Thompson's HASKELL: THE CRAFT OF FUNCTIONAL PROGRAMMING. Previously used the Bird and Wadler textbook<br><br />
<b>Web page:</b> http://www.cs.olemiss.edu/~hcc/csci555/<br><br />
<b>Comments:</b><br />
<blockquote><br />
Although I am not a researcher in FP, I enjoy teaching the FP course.<br />
Most of the students take to the course after a few weeks. Hugs works<br />
reasonably well, but, of course, more pedagogically oriented error messages<br />
and other support tools would be helpful.<br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:leavens@cs.iastate.edu Gary T. Leavens],<br />
Iowa State University<br><br />
<b>Course:</b> Programming Languages 1<br><br />
<b>Student background:</b> undergraduate course in compilers or programming languaages<br><br />
<b>Materials:</b> Hugs 1.4; Thompson's Haskell: The Craft of Programming<br><br />
<b>Web page:</b> http://www.cs.iastate.edu/~leavens/ComS541.html<br><br />
<b>Comments:</b><br />
<blockquote><br />
Be sure to tell your students how to debug programs.<br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:jtod@dcs.gla.ac.uk John O'Donnell]<br />
University of Glasgow<br><br />
<b>Course:</b> Functional Programming<br><br />
<b>Student background:</b> Programming (in Ada), Algorithmic Foundations<br><br />
<b>Materials:</b> Hugs; Simon Thompson's book on Haskell<br><br />
<b>Web page:</b> http://www.dcs.gla.ac.uk/courses/teaching/level2/modules/#FP2<br><br />
<br />
<b>Instructor:</b> [mailto:chitil@informatik.rwth-aachen.de Olaf Chitil],<br />
RWTH Aachen, Germany<br><br />
<b>Course:</b> Functional Programming in Haskell<br><br />
<b>Student background:</b> basic programming skills (not necessarily in a<br />
functional language)<br><br />
<b>Materials:</b> Hugs 1.4; Hugs user manual, slide copies;<br />
additionally the `Gentle Introduction to Haskell', probably Bird's `Introduction<br />
to Functional Programming using Haskell' in the future.<br><br />
<b>Web page:</b> http://www-i2.informatik.rwth-aachen.de/Praktikum/SWP/ (in German)<br><br />
<b>Comments:</b><br />
<blockquote><br />
The course starts with 4 full time days of learning Haskell. During the semester<br />
the students (in groups of 2 students) have to implement a compiler and an<br />
abstract machine for a simple imperative language. They are given parts of the<br />
system and a manual on how to do the remaining parts (they have no prior<br />
knowledge on compiler construction).<br />
The most difficult construct for students to understand is the monad. I<br />
introduce IO without mentioning monads. Later I explain how to build a simple<br />
exception handling system based on the type `Maybe a' / `Error a'. Only<br />
subsequently I give the general definition of monads and present the list monad<br />
and a simple state monad. However, I fear that just to understand the bind<br />
operator `>>=' requires people to be quite comfortable with higher-order<br />
functions.<br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [http://web.comlab.ox.ac.uk/oucl/people/richard.bird.html Richard Bird], Oxford Brookes University<br><br />
<b>Course:</b> Functional Programming<br><br />
<b>Student background:</b> Elementary structured programming<br><br />
<b>Web page:</b> http://web.comlab.ox.ac.uk/oucl/courses/topics00-01/fp/<br><br />
<br />
<br />
<b>Instructor:</b> [mailto:paul.hudak@yale.edu Paul Hudak],<br />
Yale University, Dept of Computer Science<br><br />
<b>Course:</b> Functional Programming<br><br />
<b>Student background:</b> at least one programming course<br><br />
<b>Materials:</b> Hugs; my own textbook, which is under preparation<br><br />
<b>Web page:</b> none<br><br />
<br />
<br />
<b>Instructor:</b> [mailto:abf@cs.ucc.ie Alex Ferguson]<br />
University College Cork<br><br />
<b>Course:</b> Functional and Logic Programming<br><br />
<b>Student background:</b> Final year undergraduate<br />
<br><br />
<b>Materials:</b> Final year undergraduate<br />
Materials: Hugs 98; ghc; Simon Thompson, "Haskell: The Craft of<br />
Functional Programming" (2nd ed.)<br />
<br><br />
<b>Web page:</b> http://yeats.ucc.ie/~abf/CS4001/<br> <br />
<b>Comments:</b><br />
<blockquote><br />
This is the declarative programming option for 4th year<br />
undergrads, who have Java as a first programming language, and some<br />
knowledge of C and C++. The current final year have had some exposure<br />
to Haskell in first year, though this is no longer the case for our<br />
current intake.<br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:lky@nada.kth.se Leif Kusoffsky],<br />
Royal Institute of Technology, Stockholm<br><br />
<b>Course:</b> Functional Programming 2D1370<br><br />
<b>Student background:</b> The course is oriented towards third year<br />
undergraduate students in computer science. The students<br />
have been introduced to imperative languages like<br />
C and Object Oriented Languages like Java<br />
<br><br />
<b>Materials:</b> Hugs; Hudak : The Haskell School of Expression<br />
<br><br />
<br />
<br />
<b>Instructor:</b> Jeremy Bobbio -- INSIA<br><br />
<b>Course:</b> Functional and Logic Programming<br><br />
<b>Student background:</b> One year CS<br />
<br><br />
<b>Materials:</b> <br />
Hugs, GHC, Paul Hudak's Haskell School of Education<br />
<br><br />
<b>Web page:</b> http://etudiants.insia.org/~jbobbio/pafp/ (french)<br> <br />
<br />
<br />
<b>Instructor:</b> [mailto:antkaij@mit.jyu.fi Antti-Juhani Kaijanaho]<br />
University of Jyväskylä<br><br />
<b>Course:</b> Functional Programming 1 & 2<br><br />
<b>Student background:</b> third-year undergraduate and up<br />
<br><br />
<b>Materials:</b><br />
GHC, Gtk2HS<br />
<br><br />
<b>Web page:</b> [http://www.mit.jyu.fi/antkaij/opetus/fo/2005-2006/index.en.html]<br />
<br><br />
<b>Last run:</b> 2005&ndash;2006<br />
<br><br />
<!--<b>Comments:</b><br />
<blockquote><br />
(I'll write this later)<br />
</blockquote>--><br />
<br />
<b>Instructor:</b> [mailto:djd@comp.leeds.ac.uk David Duke]<br />
University of Leeds, School of Computing<br><br />
<b>Course:</b> Functional Programming<br><br />
<b>Student background:</b> Second and third year undergraduate<br />
<br><br />
<b>Materials:</b> ghc; Graham Hutton "Programming in Haskell"<br />
<br><br />
<b>Web page:</b> www.comp.leeds.ac.uk/se23/<br> <br />
<b>Comments:</b><br />
<blockquote><br />
This is an optional course that students currently can take in <br />
second or third year (from 2008/9 it will be third-years only).<br />
Students will have previously used Python and Java.<br />
Although the emphasis is on learning to solve problems within<br />
the functional paradigm, and how to develop solutions within<br />
Haskell, I also like to show students what is "under the<br />
bonnet" and conclude the module with an introduction to<br />
implementation issues, using material derived from<br />
"Implementing Functional Languages" by Simon Peyton Jones and <br />
David Lester. <br />
</blockquote><br />
<br />
<b>Instructor:</b> [mailto:popavdan@yahoo.com Popa V. Dan]<br />
University of Bacau, Romania <br><br />
<b>Course:</b> "Limbaje formale si automate" (Formal languages and automata) <br><br />
<b>Student background:</b> second-year undergraduate <br />
<br><br />
<b>Materials:</b> Hugs 98 (2002 revised version) included in Mandriva (Formely Mandrake) 10.0 Linux Distribution<br />
<br><br />
<b>Web page:</b> Not yet. Try the page of the "ro" community on www.haskell.org<br />
<br> [http://www.haskell.org/haskellwiki/Ro/Haskell Ro/Haskell webpage is here] <br><br />
<b>First run:</b> 2006&ndash;2007<br />
<br><br />
<br />
Haskell is used as an implementation languages in student's laboratories.<br />
The ideea was to provide a language powerfull enough to be able to express <br />
how to build a parser starting from a grammmar. The students are able<br />
to build small (monadic) interpreters for "while-languages" using a <br />
recommanded monad and a recommanded back-end. The labs are focusing on the <br />
grammar of the languages, on the modular (monadic) parsing as a tool for <br />
verifying and processing inputs which are not validable by finite state <br />
automata but by context free grammmars. Adaptability of the language, <br />
especially obtained manipulating and improving syntax is also a target.<br />
<br />
Support (concerning Haskell): "O introducere in Haskell prin exemple" by<br />
Dan Popa, published in january 31,2007 by <br />
[http://www.edusoft.ro Edusoft](in romanian) Contact the author if needed .<br />
<br />
Other recommanded books: "Gentle Introd to Haskell 98" and YAHT <br />
Recomanded papers: All about monadic parsing. <br />
Special message for Graham Hutton, Erik Meijer and P. Wadler and all <br />
other authors with similar interests from the Haskell <br />
community:<br />
<br />
Thank you very much for your papers concerning Monadic parsing and <br />
interpreters ! <br />
<br />
<br />
'''Course:''' Programming Paradigms <br><br />
<br />
<br />
----<br />
<br />
== Comparative programming languages ==<br />
<br />
These courses teach general programming language principles, with<br />
Haskell as an example of a functional language.<br />
<br />
<b>Instructor: </b> Ruediger Marcus Flaig, University of Heidelberg (Germany)<br />
<br><br />
<b>Course:</b> An introduction to programming in bioinformatics <br><br />
<b>Student background:</b> different, but generally low<br><br />
<b>Materials:</b> Hugs-98 and lots of other stuff<br />
<br><br />
<b>Web page:</b> http://www.sanctacaris.net/rc.html<br> <br />
<b>Comments:</b><br />
<blockquote><br />
This course is designed to introduce life science students,<br />
that is to say, going-to-be biologists, physicians, biotechnologists<br />
and maybe others, to solving real-life problems (such as DNA sequence<br />
handling and analysis). Emphasis will be on paradigms (imperative /<br />
OO, functional, declarative). Although -- in order not to frighten<br />
people -- the official announcement mentions only Python, Haskell will<br />
be presented as THE purely functional language, and all solutions may<br />
be presented in either Python, Haskell or Java. I am very curious<br />
about the feedback I'll get, and maybe next term we shall focus more<br />
on Haskell. What I'd really need, though, is some life science related<br />
package for Haskell, such as BIOPYTHON and BIORUBY. <br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:ham@cs.utexas.edu Hamilton Richards],<br />
University of Texas (Austin)<br><br />
<b>Course:</b> Programming Languages (taught in 2005)<br><br />
<b>Student background:</b> <br><br />
<b>Materials:</b> Hugs 1.4; Sethi, Davie.<br><br />
<b>Web page:</b> http://www.cs.utexas.edu/users/ham/UTCS/CS345/<br><br />
<b>Comments:</b><br />
<blockquote><br />
I'm using Haskell in a programming-languages course, but it's distributed<br />
somewhat piecemeal through the course. Probably adds up to something like<br />
3-4 weeks (out of 15).<br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [http://www.cs.waikato.ac.nz/~marku Mark Utting]<br />
University of Waikato (New Zealand)<br />
<b>Course:</b> Programming Languages<br><br />
<b>Student background:</b> Two years of C++ and 1 year of Haskell<br><br />
<b>Materials:</b> Textbook "Programming Languages", Louden.<br />
<b>Web page:</b> http://www.cs.waikato.ac.nz/~marku/313<br><br />
<b>Comments:</b><br />
<blockquote><br />
The course covers at least two languages in each of the<br />
main paradigms (object-oriented, functional and logic programming),<br />
plus history, semantics and implementation issues.<br />
The Haskell section is about 2 weeks long and usually focusses on <br />
programming with higher-order functions and how that enables the<br />
language to be extended in application-specific ways<br />
(parser combinators, html-generation combinators etc.)<br />
</blockquote><br />
<br />
<b>Instructor:</b> [mailto:zeeshan@apiit.edu.pk M Zeeshan Ali Ansari],<br />
Asia Pacific Institute of Information Technology (Pakistan)<br><br />
<b>Course:</b> Advanced Programming Language Concepts<br><br />
<b>Student background:</b> Students having studied and worked on Imperative Programming Languages <br><br />
<b>Materials:</b> The Craft of Haskell, A Gentle Introduction to Haskell, Yet Another Haskell Tutorial.<br><br />
<b>Web page:</b> http://www.apiit.edu.pk<br><br />
<b>Comments:</b><br />
<blockquote><br />
This course compares and contrasts various programming language paradigms including Functional Programming. Out of 13 week course 5 to 6 of them are dedicated towards Haskell. The material is basically written in a way that enables imperative language programmers to understand the concepts and power of functional programming <br />
<br />
http://www.haskell.org/sitewiki/images/3/3d/Functional_Programming_Tutorial_By_Zeeshan_Ali_Ansari.doc<br />
<br />
<br />
</blockquote><br />
<br />
<b>Instructor:</b> John C. Mitchell,<br />
Stanford University<br><br />
<b>Course:</b> Programming Languages<br><br />
<b>Student background:</b> Some experience with Lisp/C/object-oriented languages.<br><br />
<b>Materials:</b> Concepts in Programming Languages (new Haskell chapters written with Kathleen Fisher)<br><br />
<b>Web page:</b> http://cs242.stanford.edu<br><br />
<b>Comments:</b><br />
<blockquote><br />
Central concepts in modern programming languages, impact on software development, language design trade-offs, and implementation considerations. Functional, imperative, and object-oriented paradigms. Formal semantic methods and program analysis. Modern type systems, higher order functions and closures, exceptions and continuations. Modularity, object-oriented languages, and concurrency. Runtime support for language features, interoperability, and security issues. <br />
</blockquote><br />
<br />
----<br />
<br />
== Advanced functional programming using Haskell ==<br />
<br />
These courses deal with the advanced issues such as semantics, type<br />
systems, or compilers. Includes a other advanced courses taught using<br />
Haskell. <br />
<br />
<b>Instructor:</b> [mailto:gmh@cs.nott.ac.uk Graham Hutton]<br />
School of Computer Science, University of Nottingham<br><br />
<b>Course:</b> Advanced Functional Programming<br><br />
<b>Student background:</b> At least one year of CS, including a course in Haskell<br><br />
<b>Materials:</b> Hugs; GHC; Graham Hutton, Programming in Haskell; own course material<br><br />
<b>Web page:</b> http://www.cs.nott.ac.uk/~gmh/afp.html<br />
<br />
<b>Instructor:</b> [mailto:rjmh@cs.chalmers.se John Hughes]<br />
Chalmers University, Gothenburg<br><br />
<b>Course:</b> Advanced Functional Programming<br><br />
<b>Student background:</b> General CS maturity; from this year most students have already used Haskell in introductory courses.<br><br />
<b>Materials:</b> Mainly hbc.; Papers (see web page)<br><br />
<b>Web page:</b> http://www.cs.chalmers.se/~rjmh/AFP<br><br />
<b>Comments:</b><br />
<blockquote><br />
The goal is to teach students how to solve substantial problems in a<br />
functional language --- `functional programming in anger', one might say. The<br />
emphasis is on design and use of suitable combinator libraries to simplify<br />
applications. Material covered includes monad design, use of CPS style,<br />
libraries for parsing, pretty-printing, and GUIs (presently fudgets). <br />
<br />
The course is taught in a `problem based' manner: lectures are few, while<br />
students solve three substantial programming problems during the term, with<br />
plenty of backup via group meetings. I adopted this teaching form three years<br />
ago, and it has led students to develop far better practical skills than most<br />
obtained from my earlier `lectures and exercises' courses, and I believe to<br />
use Haskell much more after the course's end.<br />
<br />
This course is optional in the third or fourth year, and is taken by a<br />
small-to-medium sized group of students.<br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:Olof.Johanssson@cs.umu.se Olof Johansson], Umeå Univesity, Department of Computing Science<br><br />
<b>Course:</b> Programming language semantics<br><br />
<b>Student background:</b> two terms of computer science studies and specificaly a course Programming language concepts<br><br />
<b>Materials:</b> Hugs and some HBC and GHC; Watt, Programming language, Syntax and Semantics<br><br />
<b>Web page:</b> http://www.cs.umu.se/local/kurser/TDBC05 (Only in swedish)<br> <br />
<br />
<br />
<b>Instructor:</b> [mailto:lyndon@cs.uwa.edu.au Lyndon While]<br />
The University of Western Australia<br><br />
<b>Course:</b> Functional Programming<br><br />
<b>Student background:</b> OOP, plus most of them have used Haskell previously<br><br />
<b>Materials:</b> hugs 98; none of the recent books really fit<br><br />
<b>Web page:</b> http://undergraduate.cs.uwa.edu.au/courses/230.301<br><br />
<b>Instructor:</b> [mailto:F.A.Rabhi@dcs.hull.ac.uk Fethi Rabhi],<br />
University of Hull (UK)<br><br />
<b>Course:</b> AI Problem Solving Techniques (using Haskell and Prolog)<br><br />
<b>Student background:</b> Haskell and Prolog programming<br><br />
<b>Materials:</b> HUGS; Thompson'96, own notes (soon to be published as a book).<br><br />
<b>Web page:</b> none<br><br />
<b>Comments:</b><br />
<blockquote><br />
It is very hard to justify learning Haskell unless it can be<br />
demonstrated in very practical situations (hence the provision<br />
of the above course).<br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:karczma@info.unicaen.fr Jerzy Karczmarczuk]<br />
University of Caen, Caen (France)<br> No links in the fr-Haskell page. Why not ?<br />
<b>Course:</b> Compilation<br><br />
<b>Student background:</b> General CS knowledge; students (should...) know Scheme and imperative languages, also some theory of languages and automata.<br><br />
<b>Materials:</b> <br />
Hugs, GHC, now also GHCi, and their documentation. Handouts: (still a little incomplete)<br />
Impossible to find the foolowing matterials.Files can not be found. <br />
* http://users.info.unicaen.fr/~karczma/matrs/Maitcomp/compilation_a.pdf<br />
* http://users.info.unicaen.fr/~karczma/matrs/Maitcomp/compilation_b.pdf<br />
* http://users.info.unicaen.fr/~karczma/matrs/Maitcomp/compilation_c.pdf<br />
<b>Comments:</b><br />
<blockquote><br />
This is a compulsory semestrial course in fourth year. Weekly: 1.5h<br />
course, 2.5H practice.<br />
One, but comprehensive assignment, taking 2 months or more.<br />
askell is our main coding tool. A little time is devoted by necessity<br />
to the language<br />
itself, but also from the perspective: "how would you compile such a<br />
language".<br />
"Standard stuff", such as parsing combinators, etc.is covered, but we<br />
don't begin with that.<br />
We start with the construction of small interpreters: from recursive<br />
Lisp-style to postfix,<br />
(Forth/PostScript style) constructing this last by partial evaluation<br />
(intuitively).<br />
We introduce control structures as lazy functions, operation<br />
sequencing through continuations,<br />
monads not only for parsing, but also for exceptions and<br />
non-determinism.<br />
We discuss (simply) the type inference. The code generator assembles a<br />
linear code by lazy<br />
concatenation of chunks which makes it trivial to deal with loops and<br />
cross-referencing<br />
fragments. Algorithms of garbage collection are presented (not<br />
implemented, though...) in<br />
a purely functional style.<br />
<br />
Students' opinion: "Frightening at first. Learning curve steep, but<br />
much less time spent on debugging, coding proficiency comes fast. Good for<br />
understanding what the compilation is about, but difficult to make a<br />
complete running program with all the I/O, etc.<br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:jeffm@cse.uconn.edu Jeffrey A. Meunier], University of Connecticut<br><br />
<b>Course:</b> CSE240 Intermediate Computer Systems<br><br />
<b>Student background:</b> computer/microprocessor organization<br />
<br><br />
<b>Materials:</b> Hugs (Feb 2001); Bird ``Introduction to Functional<br />
Programming''; Furber ``ARM System-on-Chip Architecture''<br />
<br><br />
<b>Web page:</b> http://www.engr.uconn.edu/~jeffm/Classes/CSE240-Spring-2001/index.html<br> <br />
<b>Comments:</b><br />
<blockquote><br />
This is a course in the low level programming of microprocessor systems.<br />
The course will focus on the development of an emulator (virtual<br />
machine, or VM) for a small computer system based on a modern RISC<br />
microprocessor (the ARM CPU) using a high level programming language<br />
(Haskell), and assembly language programming of the VM. Development of<br />
the VM will occur in stages, starting with the simple direct-execution<br />
(stream-based) model, gradually moving to a more realistic memory-mapped<br />
model, including exception handlers, concurrent processes, and<br />
asynchronous external devices.<br />
</blockquote><br />
<br />
<b>Instructor:</b> Gabriele Keller<br />
The University of New South Wales<br><br />
<b>Course:</b> Concepts of Programming Languages<br><br />
<b>Student background:</b> Most of them have used Haskell in first year<br><br />
<b>Materials:</b> GHC, TaPL and `Programming Languages: Theory and Practice', papers<br><br />
<b>Web page:</b> http://www.cse.unsw.edu.au/~cs3161<br><br />
<b>Last run:</b> 2006<br><br />
<b>Comments:</b><br />
<blockquote><br />
Expose students to a theory of programming languages based on type<br />
theory and operational semantics as a mathematically sound framework<br />
which allows us to investigate the properties of a large number of<br />
programming language features, including:<br />
<br />
* on semantics of different programming languages and programming paradigms: imperative, object oriented, and declarative.<br />
* theoretical foundations of programming languages: syntax, operatational, axiomatic and denotational semantics.<br />
* implementation aspects of central language features, such as dynamic and strong typing, polymorphism, overloading and automatic memory management<br />
<br />
Assignments are in GHC/Haskell, and in the past have included implementing a<br />
mini-Haskell type checker, type inference and interpreter.<br />
</blockquote><br />
<br />
<b>Instructor:</b> Manuel Chakravarty<br />
The University of New South Wales<br><br />
<b>Course:</b> Advanced Functional Programming<br><br />
<b>Student background:</b> Most of them have used Haskell in first year<br><br />
<b>Materials:</b> GHC, papers (see the website)<br><br />
<b>Web page:</b> http://www.cse.unsw.edu.au/~cs4132<br><br />
<b>Last run:</b>2004<br><br />
<b>Comments:</b><br />
<blockquote><br />
To provide students with an understanding of the theory and practice of<br />
the design, use, and implementation of functional programming languages,<br />
such as Haskell<br />
<br />
This includes selected topics from the following areas:<br />
<br />
* Foundations: lambda calculus, semantics, and type systems.<br />
* Design: side-effects, exceptions, concurrency, and parallelism.<br />
* Implementation: abstract machines, program transformation, and memory management. <br />
* Programming techniques: combinator libraries, monads, generic programming, and meta programming.<br />
* Applications: domain specific languages, graphics, web programming, reactive systems, and scientific programming.<br />
</blockquote><br />
<br />
[[Category:Community]]</div>Aivanhttps://wiki.haskell.org/index.php?title=Haskell_in_education&diff=55915Haskell in education2013-05-13T14:32:53Z<p>Aivan: /* Haskell as a second language */</p>
<hr />
<div>[[Category:Education]]<br />
This is a collection of material of interest to those teaching or<br />
taking courses that use Haskell. There is also a more general site,<br />
http://www.cs.kun.nl/fple/, devoted to all functional languages. The proceedings of the latest<br />
[http://www.informatik.uni-kiel.de/~mh/publications/reports/fdpe02/ International Workshop on Functional and Declarative Programming in Education (FDPE)] are now available.<br />
Some of the lecture notes and<br />
other course material found in these web pages are excellent<br />
supplements to the available text books.<br />
If you would like to use lecture<br />
notes, assignments, or other material found in these course web pages<br />
please contact the author for permission.<br />
<br />
Most of the entries are years old. When you add your own new<br />
material to this page, please also say when the course was run for the last time.<br />
<br />
The results of a survey of university courses using Haskell in the academic year 2005-2006 can be found [http://www.cs.chalmers.se/~rjmh/Wash/Survey/teaching.htm here]. Also, some news were added during the 2006-2007 academic year.<br />
<br />
== Suitable Course Textbooks ==<br />
<br />
See [[Books#Textbooks]].<br />
<br />
== Haskell as a first language ==<br />
<br />
These courses teach Haskell to students with no background in programming.<br />
<br />
<b>Instructor:</b> [http://homepages.inf.ed.ac.uk/wadler/ Philip Wadler] University of Edinburgh<br><br />
<b>Course:</b> [[Informatics 1 - Functional Programming]]<br><br />
<b>Materials:</b> GHCi, Emacs, Thompson: Haskell, the Craft of Functional Programming<br><br />
<b>Web page:</b> http://www.inf.ed.ac.uk/teaching/courses/inf1/fp/ <br><br />
<br />
<br />
<b>Instructor:</b> [mailto:page@ou.edu Rex Page] <br />
University of<br />
Oklahoma<br><br />
<b>Course:</b> Introduction to Computer Programming<br><br />
<b>Student background:</b> High-school mathematics<br><br />
<b>Materials:</b> Projects, Exams, Downloadable textbook: Rex Page, <br />
&quot;Two<br />
Dozen Short Lessons in Haskell&quot;<br><br />
<b>Web page:</b> http://www.cs.ou.edu/~rlpage/fpclassSpring97/<br />
<br />
<b>Comments:</b><br />
<blockquote><br />
These materials arose from a course offered for three consecutive<br />
semesters as<br />
an alternative to our usual first course in programming. Most of the<br />
students<br />
who took the course graduated in the past two years, and many of them<br />
cited it<br />
in the exit interview with the department chair as the most influential<br />
course<br />
in the entire academic career.<br />
<p>All materials for two offerings of the course are available through<br />
the web<br />
page. This includes individual projects, team projects, project<br />
solutions,<br />
exams, supplied software (connected with certain projects), tips for<br />
students<br />
taking the course, FAQs addressing questions that students asked during<br />
the<br />
semester, and a short textbook which served as the primary text in the<br />
course.</p><br />
<p>The first 10 to 11 weeks of the course use Haskell. Students are<br />
required to<br />
write nine programs in Haskell, three of which are team projects that<br />
combine<br />
software developed in individual projects. Different members of a team<br />
are<br />
assigned different individual projects, and the team efforts combine<br />
their<br />
solutions into a working piece of software.</p><br />
<p>In the early part of the course, students use operators like map,<br />
foldr, zip,<br />
and iterate to express computations. Explicit recursion is introduced<br />
after some<br />
experience with these common patterns of computation. Examples and<br />
problems<br />
address non-numeric applications, for the most part. Both interactive<br />
and file<br />
I/O are covered, but general purpose monads are not.</p><br />
<p>The last 5 to 6 weeks of the course use C, and most of the projects<br />
in that<br />
part of the course duplicate the function of earlier pieces of software<br />
that the<br />
students have written in Haskell.</p><br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:Jonathan.Hill@comlab.ox.ac.uk Jonathan Hill]<br />
Oxford University Computing Laboratory<br><br />
<b>Course:</b> Functional Programming for the Integrated Graduate Development Programme in Software Engineering at Oxford University.<br><br />
<b>Student background:</b> Discrete mathematics (the course is a part time MSc for people from industry; most are from IBM or Nortel).<br><br />
<b>Materials:</b> Gofer (an old version, with a stripped down prelude---no parameter classes!); Own course material<br><br />
<b>Web page:</b> http://www.comlab.ox.ac.uk/igdp/text/course06.html<br />
Note: Web pages not accessible. May be ... moved ? <br />
<br />
<br />
<b>Instructor:</b> [mailto:nxg@cs.nott.ac.uk Neil Ghani]<br />
School of Computer Science, University of Nottingham<br><br />
<b>Course:</b> Functional Programming<br><br />
<b>Student background:</b> None<br><br />
<b>Materials:</b> Hugs; Graham Hutton, Programming in Haskell; own lecture slides<br><br />
<b>Web page:</b> http://www.cs.nott.ac.uk/~nxg/G51FUN06/fun.html<br />
<br />
<b>Instructor:</b> [mailto:prins@cs.unc.edu" Jan Prins]<br />
UNC Chapel Hill<br><br />
<b>Course:</b> Introduction to Functional Programming<br><br />
<b>Student background:</b> solid background in high-school science and mathematics<br><br />
<b>Materials:</b> Hugs 1.4 incl. Active Haskell, FRAN and [[Haskore]]; Simon Thompson, "Haskell: The Art of Functional Programming"<br><br />
<b>Web page:</b> http://www.cs.unc.edu/~prins/Classes/15/<br><br />
<b>Comments:</b><br />
<blockquote><br />
(Introductory programming course for CS and math/science majors, typically Freshman and Sophomores. Class size ~60)<br />
<br />
Our undergraduate computing environment is now largely<br />
PCs running Windows NT. We use NTEmacs as the programming<br />
environment with a slightly modified version of Emacs hugs<br />
mode with hugs running as a subprocess. The combined<br />
hugs/NTEmacs/Active Haskell distribution (available through<br />
course home page) is installed on 400+ public Win NT machines<br />
on campus and some unknown number of student-owned Win 95/98<br />
machines.<br />
<br />
This arrangement is new this semester, but so far has been<br />
working well. Keystroke-oriented interactive applications<br />
may be problematic with hugs running in NTEmacs shell mode.<br />
<br />
I'm planning assignments using Fran and Active Haskell and<br />
will try teaching the "brief introduction to imperative<br />
programming" at the end of the class using monads. I would<br />
be interested in talking with anyone who has experience or<br />
suggestions along these lines.<br />
<br />
I took a cue from Paul Hudak and others and have occasional<br />
appearances of MS Agents during lectures to wake students up!<br />
<br />
This is my first time teaching this course, and I would<br />
enjoy talking to others teaching at a similar level. A<br />
cursory search on the web didn't reveal many courses<br />
in this category.<br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:dave@cs.chalmers.se David Sands]<br />
University of Gothenburg & Chalmers University of Technology<br><br />
<b>Course:</b> Programmering för Naturvetare<br><br />
<b>Student background:</b> New students<br><br />
<b>Materials:</b> hugs 1.4; Simon Thompson<br><br />
<b>Web page:</b> http://www.md.chalmers.se/Cs/Grundutb/Kurser/nptah/<br><br />
<b>Comments:</b><br />
<blockquote><br />
This is the first part of a first course in programming. About 16<br />
lectures, each 2x45 mins plus weekly exercise classes and three<br />
assessed programming exercises. Most of my materials are in English.<br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:M.A.Rodrigues@dcs.hull.ac.uk Marcos A Rodrigues]<br />
The University of Hull, Hull, UK<br><br />
<b>Course:</b> Functional and Logic Programming<br><br />
<b>Student background:</b> none<br><br />
<b>Materials:</b> hugs 1.4; Haskell: the Craft of Functional Programming. Thompson S., Addison Wesley, 1996.<br><br />
<br />
<b>Instructor:</b> [mailto:Torsten.Grust@uni-konstanz.de Torsten Grust]<br />
University of Konstanz (Germany)<br> <br />
<b>Course:</b> Deklarative Programmierung (Declarative Programming, in german)<br><br />
<b>Student background:</b> basic math, no programming background required<br><br />
<b>Materials:</b> Hugs 1.4; (~300) slides available from the course web page;<br />
Jeroen Fokker's classroom text: Functional Programming<br />
http://www.cs.uu.nl/~jeroen/courses/fp-eng.ps.gz</a>;<br />
Richard Bird, Phil Wadler: Introduction to Functional Programming; Simon Peyton-Jones: Implementation of Functional Programming Languages<br><br />
<b>Web page:</b> http://www.fmi.uni-konstanz.de/dbis/Courses-old/Courses-ss98/decl-ss98.html<br><br />
<b>Comments:</b><br />
<blockquote><br />
The course is in German only (sorry about that). It additionally<br />
features an introduction to logical programming and Prolog.<br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:richardb@cse.unsw.edu.au Richard Buckland]<br />
University of New South Wales<br><br />
<b>Course:</b> Computing 1A<br><br />
<b>Student background:</b> Mixed, some have no computing<br />
background. This is our cs1 subject.<br><br />
<b>Materials:</b> Hugs 1.4; Simon Thompson<br><br />
<b>Web page:</b> http://www.cse.unsw.edu.au/~cs1011<br><br />
<br />
<br />
<b>Instructor:</b> [mailto:robert@techfak.uni-bielefeld Robert Giegerich], Stefan Posch, University Bielefeld, Germany<br><br />
<b>Course:</b> Introduction to Computer Science<br><br />
<b>Student background:</b> Completed High School (Abitur)<br><br />
<b>Materials:</b> Hugs; Class Notes by Robert Giegerich and Ralf Hinze<br><br />
<b>Comments:</b><br />
<blockquote><br />
Our first semester course<br />
uses Haskell as a vehicle to fundamental aspects of computation:<br />
algorithmics, specification and verification, efficiency analysis,<br />
programming methods. This works wonderfully. We do not require previous<br />
or additional programming experience. Haskell is quickly learned, <br />
to the necessary degreee; we make no attempt to cover the full language.<br />
This is NOT a Haskell course! Haskell allows us to speak about concepts<br />
of computer science WITHOUT a lot of language learning. And Haskell<br />
even helps to keep out detrimental habits from previous programming<br />
experience, as well as motivational problems resulting from the widely<br />
differing previous experiences of our incoming students.<br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:hj@sm.luth.se Håkan Jonsson] Luleå University of Technology, Sweden<br><br />
<b>Course:</b> SMD001, functional programming<br><br />
<b>Student background:</b> <br />
None. This is the very first programming course <br />
our students take.<br><br />
<b>Materials:</b> <br />
Materials: Simon Thompson's Haskell book + 7 laboratory/programming <br />
assignments using Hugs.<br />
<br><br />
<b>Web page:</b>http://www.sm.luth.se/csee/courses/smd/001/ (mostly Swedish)<br> <br />
<br />
<br />
<b>Instructor:</b> [mailto:Clem.Baker-Finch@cs.anu.edu.au Clem Baker-Finch, Australian National University<br><br />
<b>Course:</b>Introduction to Programming and Algorithms<br><br />
<b>Student background:</b> No programming background was<br />
assumed.<br />
<br><br />
<b>Materials:</b> GHC, GHCi, Simon Thompson 1st ed., my own materials. <br />
<br><br />
<b>Web page:</b> http://cs.anu.edu.au/Student/comp1100/<br> <br />
<b>Comments:</b><br />
<blockquote><br />
The first 75% of the course is basic programming concepts using Haskell. The remainder covers the same concepts in Java. This is reinforced - hopefully - by the third assignment (in Java) being the same as the first assignment (in Haskell). The aim is to provide a managed transition to the course which follows in second semester. Another point of possible interest is the use of a simple graphics library, ANUPlot, built on top of the OpenGL binding. See http://code.google.com/p/anuplot/<br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:lyndon@cs.uwa.edu.au Lyndon While] The University of Western Australia<br><br />
<b>Course:</b> Foundations of Computer Science<br><br />
<b>Student background:</b> None<br><br />
<b>Materials:</b> hugs 98; Thompson.<br><br />
<b>Web page:</b> http://undergraduate.cs.uwa.edu.au/courses/230.123<br><br />
<br />
<br />
<b>Instructor:</b> [http://www.cs.us.es/~jalonso José A. Alonso Jiménez] Dept of Computer Science and A.I., University of Seville, Spain<br><br />
<b>Course:</b> Informatics (Inform&aacute;tica, in spanish)<br><br />
<b>Student background:</b> None. This is the very first programming course <br />
our students take.<br><br />
<b>Materials:</b> GHCi, Emacs, Graham Hutton: &quot;Programming in Haskell&quot;, Slides, Exercises, Exams <br><br />
<b>Web page:</b> http://www.cs.us.es/~jalonso/cursos/i1m (in spanish)<br><br />
<b>First run:</b> 2009–2010<br><br />
<b>Last run:</b> 2012–2013<br />
<br />
----<br />
<br />
== Haskell as a second language ==<br />
<br />
These courses teach Haskell to students that have already learned<br />
another language.<br />
<br />
<b>Instructor:</b> [mailto:page@ou.edu Rex Page]<br />
University of Oklahoma<br><br />
<b>Course:</b> Discrete Mathematics<br><br />
<b>Student background:</b> High-school mathematics, introductory programming<br />
course (any language)<br><br />
<b>Materials:</b> Lecture notes, Projects, Exams, Solutions, Proof checking<br />
tools, etc.; text: Hall and O'Donnell, &quot;Discrete Mathematics with a<br />
Computer&quot;<br><br />
<br />
<b>Web page:</b> http://www.cs.ou.edu/~beseme/<br><br />
<b>Comments:</b><br />
<blockquote><br />
Lecture notes comprise over 350 animated slides (all both PowerPoint and<br />
PDF<br />
formats). About two-thirds of the material centers around mathematical logic.<br />
After the introduction of predicates, all of the examples in the logic<br />
portion<br />
of the course involve reasoning about properties of software, most of which is<br />
expressed in Haskell (a few are conventional looping functions).<br />
<p>Software examples include sum, sequence concatenation, logical operations on<br />
sequences, the Russian peasant algorithm, insertion and lookup in AVL <br />
trees, and<br />
other computations. Most of the properties verified relate to aspects of <br />
program<br />
correctness, but resource utilization properties are also verified in <br />
some<br />
cases. Several semesters worth of exams (finals and exams given during <br />
the term)<br />
are provided. The slides have matured through several offerings of the course.</p><br />
<p>The remaining third of the course discusses other standard topics<br />
in discrete<br />
mathematics, such as sets, functions, relations, trees, and counting.<br />
The web<br />
page provides access to a preview of the material. Exams and solutions are<br />
protected by a login procedure (to increase the comfort level of<br />
instructors<br />
wishing to use them in courses). The web page provides a link through<br />
which<br />
instructors may gain access to the full website.</p><br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:labra@lsi.uniovi.es Jose Emilio Labra Gayo],<br />
Dept. of Computer Science (EUITIO) University of Oviedo<br><br />
<b>Course:</b> Logic and Functional Programming<br><br />
<b>Student background:</b> The course is oriented towards third year undergraduate students in computer science. Usually, the students have been<br />
introduced to imperative languages like Pascal and Object <br />
Oriented Languages like C++<br><br />
<b>Materials:</b> Hugs; R. Bird "Introd. to FP using Haskell" (2nd Ed), J. E. Labra Gayo. "Introduction to the Haskell Language" (in spanish).<br><br />
<b>Web page:</b> http://lsi.uniovi.es/~labra/plf.html (in spanish).<br />
My FP page: http://lsi.uniovi.es/~labra/FuncProg.html<br><br />
<br />
<br />
<b>Instructor:</b> [mailto:fruehr@willamette.edu Fritz Ruehr]<br />
Willamette University, Salem, Oregon, USA (a small Liberal Arts College, about 1 hour from Portland & OGI)<br><br />
<b>Course:</b> CS 451 Topics in Computer Science: Functional Programming<br><br />
<b>Student background:</b> Data structures (I may also have required discrete math)<br><br />
<b>Materials:</b> Hugs 1.4 beta (I also taught Scheme); Haskell: The Craft of Functional Programming by Simon Thompson (I also used my own on-line lecture notes and labs and Kent Dybvig's text on Scheme)<br><br />
<b>Web page:</b> http://www.willamette.edu/~fruehr/451/<br><br />
<b>Comments:</b><br />
<blockquote><br />
The notes and labs I have on-line are in pretty rough form: many slide <br />
points are just one-line topical stubs I used as reminders in lecture.<br />
Many of the on-line materials are not linked into the (out of date)<br />
home page.<br />
<br />
I hope to have the course approved for next Fall as a regular offering<br />
(i.e., not as a "special topic") and should have more extensive<br />
on-line materials up by then.<br />
<br />
Teaching "bi-lingually" in Haskell and Scheme seemed like a good idea<br />
at the time, but next time around I will use Haskell as the main vehicle,<br />
perhaps taking some time near the end of the course to highlight some<br />
other languages (Scheme, ML, Clean).<br />
<br />
Some of my students used Conal Elliot's Fran and Paul Hudak's Haskore<br />
and liked them a lot; I was nice to have some significantly-sized<br />
applications that seemed more practical and fun to show off at the end<br />
of the course (I should have demonstrated these things at the beginning<br />
of the course to help with motivation). Next time around I would like to<br />
have a "beginner's prelude" or similar available to avoid problems with<br />
classes in type inference, Int vs. Integer, etc. These problems were a<br />
constant annoyance during lectures.<br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:J.Hamer@cs.auckland.ac.nz John Hamer],<br />
University of Auckland<br><br />
<b>Course:</b> Logic and Functional Programming<br><br />
<b>Student background:</b> Year 2 programming + some discrete maths<br><br />
<b>Materials:</b> Hugs 98, Haskell School of Expression, Page "Two Dozen Short Lessons in Haskell",<br><br />
<b>Web page:</b> http://www.cs.auckland.ac.nz/compsci360fc<br><br />
<br />
<br />
<b>Instructor:</b> [mailto:lengauer@fmi.uni-passau.de Chris Lengauer]<br />
University of Passau<br><br />
<b>Course:</b> Functional Programming<br><br />
<b>Student background:</b> two years of CS study<br><br />
<b>Materials:</b> hugs; Richard Bird's new text (PHI)<br><br />
<b>Web page:</b> not reachable from outside Passau<br><br />
<br />
<br />
<b>Instructor:</b> [mailto:cunningham@cs.olemiss.edu Conrad Cunningham]<br />
University of Mississippi<br><br />
<b>Course:</b> Functional Programming<br><br />
<b>Student background:</b> official -- senior or graduate standing; actual -- introductory programming, data structures, and discrete math<br><br />
<b>Materials:</b> Hugs on Unix and MS Windows systems;<br />
Mostly use the instructor's own set of lecture notes. Also Simon Thompson's HASKELL: THE CRAFT OF FUNCTIONAL PROGRAMMING. Previously used the Bird and Wadler textbook<br><br />
<b>Web page:</b> http://www.cs.olemiss.edu/~hcc/csci555/<br><br />
<b>Comments:</b><br />
<blockquote><br />
Although I am not a researcher in FP, I enjoy teaching the FP course.<br />
Most of the students take to the course after a few weeks. Hugs works<br />
reasonably well, but, of course, more pedagogically oriented error messages<br />
and other support tools would be helpful.<br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:leavens@cs.iastate.edu Gary T. Leavens],<br />
Iowa State University<br><br />
<b>Course:</b> Programming Languages 1<br><br />
<b>Student background:</b> undergraduate course in compilers or programming languaages<br><br />
<b>Materials:</b> Hugs 1.4; Thompson's Haskell: The Craft of Programming<br><br />
<b>Web page:</b> http://www.cs.iastate.edu/~leavens/ComS541.html<br><br />
<b>Comments:</b><br />
<blockquote><br />
Be sure to tell your students how to debug programs.<br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:jtod@dcs.gla.ac.uk John O'Donnell]<br />
University of Glasgow<br><br />
<b>Course:</b> Functional Programming<br><br />
<b>Student background:</b> Programming (in Ada), Algorithmic Foundations<br><br />
<b>Materials:</b> Hugs; Simon Thompson's book on Haskell<br><br />
<b>Web page:</b> http://www.dcs.gla.ac.uk/courses/teaching/level2/modules/#FP2<br><br />
<br />
<b>Instructor:</b> [mailto:chitil@informatik.rwth-aachen.de Olaf Chitil],<br />
RWTH Aachen, Germany<br><br />
<b>Course:</b> Functional Programming in Haskell<br><br />
<b>Student background:</b> basic programming skills (not necessarily in a<br />
functional language)<br><br />
<b>Materials:</b> Hugs 1.4; Hugs user manual, slide copies;<br />
additionally the `Gentle Introduction to Haskell', probably Bird's `Introduction<br />
to Functional Programming using Haskell' in the future.<br><br />
<b>Web page:</b> http://www-i2.informatik.rwth-aachen.de/Praktikum/SWP/ (in German)<br><br />
<b>Comments:</b><br />
<blockquote><br />
The course starts with 4 full time days of learning Haskell. During the semester<br />
the students (in groups of 2 students) have to implement a compiler and an<br />
abstract machine for a simple imperative language. They are given parts of the<br />
system and a manual on how to do the remaining parts (they have no prior<br />
knowledge on compiler construction).<br />
The most difficult construct for students to understand is the monad. I<br />
introduce IO without mentioning monads. Later I explain how to build a simple<br />
exception handling system based on the type `Maybe a' / `Error a'. Only<br />
subsequently I give the general definition of monads and present the list monad<br />
and a simple state monad. However, I fear that just to understand the bind<br />
operator `>>=' requires people to be quite comfortable with higher-order<br />
functions.<br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [http://web.comlab.ox.ac.uk/oucl/people/richard.bird.html Richard Bird], Oxford Brookes University<br><br />
<b>Course:</b> Functional Programming<br><br />
<b>Student background:</b> Elementary structured programming<br><br />
<b>Web page:</b> http://web.comlab.ox.ac.uk/oucl/courses/topics00-01/fp/<br><br />
<br />
<br />
<b>Instructor:</b> [mailto:paul.hudak@yale.edu Paul Hudak],<br />
Yale University, Dept of Computer Science<br><br />
<b>Course:</b> Functional Programming<br><br />
<b>Student background:</b> at least one programming course<br><br />
<b>Materials:</b> Hugs; my own textbook, which is under preparation<br><br />
<b>Web page:</b> none<br><br />
<br />
<br />
<b>Instructor:</b> [mailto:abf@cs.ucc.ie Alex Ferguson]<br />
University College Cork<br><br />
<b>Course:</b> Functional and Logic Programming<br><br />
<b>Student background:</b> Final year undergraduate<br />
<br><br />
<b>Materials:</b> Final year undergraduate<br />
Materials: Hugs 98; ghc; Simon Thompson, "Haskell: The Craft of<br />
Functional Programming" (2nd ed.)<br />
<br><br />
<b>Web page:</b> http://yeats.ucc.ie/~abf/CS4001/<br> <br />
<b>Comments:</b><br />
<blockquote><br />
This is the declarative programming option for 4th year<br />
undergrads, who have Java as a first programming language, and some<br />
knowledge of C and C++. The current final year have had some exposure<br />
to Haskell in first year, though this is no longer the case for our<br />
current intake.<br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:lky@nada.kth.se Leif Kusoffsky],<br />
Royal Institute of Technology, Stockholm<br><br />
<b>Course:</b> Functional Programming 2D1370<br><br />
<b>Student background:</b> The course is oriented towards third year<br />
undergraduate students in computer science. The students<br />
have been introduced to imperative languages like<br />
C and Object Oriented Languages like Java<br />
<br><br />
<b>Materials:</b> Hugs; Hudak : The Haskell School of Expression<br />
<br><br />
<br />
<br />
<b>Instructor:</b> Jeremy Bobbio -- INSIA<br><br />
<b>Course:</b> Functional and Logic Programming<br><br />
<b>Student background:</b> One year CS<br />
<br><br />
<b>Materials:</b> <br />
Hugs, GHC, Paul Hudak's Haskell School of Education<br />
<br><br />
<b>Web page:</b> http://etudiants.insia.org/~jbobbio/pafp/ (french)<br> <br />
<br />
<br />
<b>Instructor:</b> [mailto:antkaij@mit.jyu.fi Antti-Juhani Kaijanaho]<br />
University of Jyväskylä<br><br />
<b>Course:</b> Functional Programming 1 & 2<br><br />
<b>Student background:</b> third-year undergraduate and up<br />
<br><br />
<b>Materials:</b><br />
GHC, Gtk2HS<br />
<br><br />
<b>Web page:</b> [http://www.mit.jyu.fi/antkaij/opetus/fo/2005-2006/index.en.html]<br />
<br><br />
<b>Last run:</b> 2005&ndash;2006<br />
<br><br />
<!--<b>Comments:</b><br />
<blockquote><br />
(I'll write this later)<br />
</blockquote>--><br />
<br />
<b>Instructor:</b> [mailto:djd@comp.leeds.ac.uk David Duke]<br />
University of Leeds, School of Computing<br><br />
<b>Course:</b> Functional Programming<br><br />
<b>Student background:</b> Second and third year undergraduate<br />
<br><br />
<b>Materials:</b> ghc; Graham Hutton "Programming in Haskell"<br />
<br><br />
<b>Web page:</b> www.comp.leeds.ac.uk/se23/<br> <br />
<b>Comments:</b><br />
<blockquote><br />
This is an optional course that students currently can take in <br />
second or third year (from 2008/9 it will be third-years only).<br />
Students will have previously used Python and Java.<br />
Although the emphasis is on learning to solve problems within<br />
the functional paradigm, and how to develop solutions within<br />
Haskell, I also like to show students what is "under the<br />
bonnet" and conclude the module with an introduction to<br />
implementation issues, using material derived from<br />
"Implementing Functional Languages" by Simon Peyton Jones and <br />
David Lester. <br />
</blockquote><br />
<br />
<b>Instructor:</b> [mailto:popavdan@yahoo.com Popa V. Dan]<br />
University of Bacau, Romania <br><br />
<b>Course:</b> "Limbaje formale si automate" (Formal languages and automata) <br><br />
<b>Student background:</b> second-year undergraduate <br />
<br><br />
<b>Materials:</b> Hugs 98 (2002 revised version) included in Mandriva (Formely Mandrake) 10.0 Linux Distribution<br />
<br><br />
<b>Web page:</b> Not yet. Try the page of the "ro" community on www.haskell.org<br />
<br> [http://www.haskell.org/haskellwiki/Ro/Haskell Ro/Haskell webpage is here] <br><br />
<b>First run:</b> 2006&ndash;2007<br />
<br><br />
<br />
Haskell is used as an implementation languages in student's laboratories.<br />
The ideea was to provide a language powerfull enough to be able to express <br />
how to build a parser starting from a grammmar. The students are able<br />
to build small (monadic) interpreters for "while-languages" using a <br />
recommanded monad and a recommanded back-end. The labs are focusing on the <br />
grammar of the languages, on the modular (monadic) parsing as a tool for <br />
verifying and processing inputs which are not validable by finite state <br />
automata but by context free grammmars. Adaptability of the language, <br />
especially obtained manipulating and improving syntax is also a target.<br />
<br />
Support (concerning Haskell): "O introducere in Haskell prin exemple" by<br />
Dan Popa, published in january 31,2007 by <br />
[http://www.edusoft.ro Edusoft](in romanian) Contact the author if needed .<br />
<br />
Other recommanded books: "Gentle Introd to Haskell 98" and YAHT <br />
Recomanded papers: All about monadic parsing. <br />
Special message for Graham Hutton, Erik Meijer and P. Wadler and all <br />
other authors with similar interests from the Haskell <br />
community:<br />
<br />
Thank you very much for your papers concerning Monadic parsing and <br />
interpreters ! <br />
<br />
----<br />
<br />
== Comparative programming languages ==<br />
<br />
These courses teach general programming language principles, with<br />
Haskell as an example of a functional language.<br />
<br />
<b>Instructor: </b> Ruediger Marcus Flaig, University of Heidelberg (Germany)<br />
<br><br />
<b>Course:</b> An introduction to programming in bioinformatics <br><br />
<b>Student background:</b> different, but generally low<br><br />
<b>Materials:</b> Hugs-98 and lots of other stuff<br />
<br><br />
<b>Web page:</b> http://www.sanctacaris.net/rc.html<br> <br />
<b>Comments:</b><br />
<blockquote><br />
This course is designed to introduce life science students,<br />
that is to say, going-to-be biologists, physicians, biotechnologists<br />
and maybe others, to solving real-life problems (such as DNA sequence<br />
handling and analysis). Emphasis will be on paradigms (imperative /<br />
OO, functional, declarative). Although -- in order not to frighten<br />
people -- the official announcement mentions only Python, Haskell will<br />
be presented as THE purely functional language, and all solutions may<br />
be presented in either Python, Haskell or Java. I am very curious<br />
about the feedback I'll get, and maybe next term we shall focus more<br />
on Haskell. What I'd really need, though, is some life science related<br />
package for Haskell, such as BIOPYTHON and BIORUBY. <br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:ham@cs.utexas.edu Hamilton Richards],<br />
University of Texas (Austin)<br><br />
<b>Course:</b> Programming Languages (taught in 2005)<br><br />
<b>Student background:</b> <br><br />
<b>Materials:</b> Hugs 1.4; Sethi, Davie.<br><br />
<b>Web page:</b> http://www.cs.utexas.edu/users/ham/UTCS/CS345/<br><br />
<b>Comments:</b><br />
<blockquote><br />
I'm using Haskell in a programming-languages course, but it's distributed<br />
somewhat piecemeal through the course. Probably adds up to something like<br />
3-4 weeks (out of 15).<br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [http://www.cs.waikato.ac.nz/~marku Mark Utting]<br />
University of Waikato (New Zealand)<br />
<b>Course:</b> Programming Languages<br><br />
<b>Student background:</b> Two years of C++ and 1 year of Haskell<br><br />
<b>Materials:</b> Textbook "Programming Languages", Louden.<br />
<b>Web page:</b> http://www.cs.waikato.ac.nz/~marku/313<br><br />
<b>Comments:</b><br />
<blockquote><br />
The course covers at least two languages in each of the<br />
main paradigms (object-oriented, functional and logic programming),<br />
plus history, semantics and implementation issues.<br />
The Haskell section is about 2 weeks long and usually focusses on <br />
programming with higher-order functions and how that enables the<br />
language to be extended in application-specific ways<br />
(parser combinators, html-generation combinators etc.)<br />
</blockquote><br />
<br />
<b>Instructor:</b> [mailto:zeeshan@apiit.edu.pk M Zeeshan Ali Ansari],<br />
Asia Pacific Institute of Information Technology (Pakistan)<br><br />
<b>Course:</b> Advanced Programming Language Concepts<br><br />
<b>Student background:</b> Students having studied and worked on Imperative Programming Languages <br><br />
<b>Materials:</b> The Craft of Haskell, A Gentle Introduction to Haskell, Yet Another Haskell Tutorial.<br><br />
<b>Web page:</b> http://www.apiit.edu.pk<br><br />
<b>Comments:</b><br />
<blockquote><br />
This course compares and contrasts various programming language paradigms including Functional Programming. Out of 13 week course 5 to 6 of them are dedicated towards Haskell. The material is basically written in a way that enables imperative language programmers to understand the concepts and power of functional programming <br />
<br />
http://www.haskell.org/sitewiki/images/3/3d/Functional_Programming_Tutorial_By_Zeeshan_Ali_Ansari.doc<br />
<br />
<br />
</blockquote><br />
<br />
<b>Instructor:</b> John C. Mitchell,<br />
Stanford University<br><br />
<b>Course:</b> Programming Languages<br><br />
<b>Student background:</b> Some experience with Lisp/C/object-oriented languages.<br><br />
<b>Materials:</b> Concepts in Programming Languages (new Haskell chapters written with Kathleen Fisher)<br><br />
<b>Web page:</b> http://cs242.stanford.edu<br><br />
<b>Comments:</b><br />
<blockquote><br />
Central concepts in modern programming languages, impact on software development, language design trade-offs, and implementation considerations. Functional, imperative, and object-oriented paradigms. Formal semantic methods and program analysis. Modern type systems, higher order functions and closures, exceptions and continuations. Modularity, object-oriented languages, and concurrency. Runtime support for language features, interoperability, and security issues. <br />
</blockquote><br />
<br />
----<br />
<br />
== Advanced functional programming using Haskell ==<br />
<br />
These courses deal with the advanced issues such as semantics, type<br />
systems, or compilers. Includes a other advanced courses taught using<br />
Haskell. <br />
<br />
<b>Instructor:</b> [mailto:gmh@cs.nott.ac.uk Graham Hutton]<br />
School of Computer Science, University of Nottingham<br><br />
<b>Course:</b> Advanced Functional Programming<br><br />
<b>Student background:</b> At least one year of CS, including a course in Haskell<br><br />
<b>Materials:</b> Hugs; GHC; Graham Hutton, Programming in Haskell; own course material<br><br />
<b>Web page:</b> http://www.cs.nott.ac.uk/~gmh/afp.html<br />
<br />
<b>Instructor:</b> [mailto:rjmh@cs.chalmers.se John Hughes]<br />
Chalmers University, Gothenburg<br><br />
<b>Course:</b> Advanced Functional Programming<br><br />
<b>Student background:</b> General CS maturity; from this year most students have already used Haskell in introductory courses.<br><br />
<b>Materials:</b> Mainly hbc.; Papers (see web page)<br><br />
<b>Web page:</b> http://www.cs.chalmers.se/~rjmh/AFP<br><br />
<b>Comments:</b><br />
<blockquote><br />
The goal is to teach students how to solve substantial problems in a<br />
functional language --- `functional programming in anger', one might say. The<br />
emphasis is on design and use of suitable combinator libraries to simplify<br />
applications. Material covered includes monad design, use of CPS style,<br />
libraries for parsing, pretty-printing, and GUIs (presently fudgets). <br />
<br />
The course is taught in a `problem based' manner: lectures are few, while<br />
students solve three substantial programming problems during the term, with<br />
plenty of backup via group meetings. I adopted this teaching form three years<br />
ago, and it has led students to develop far better practical skills than most<br />
obtained from my earlier `lectures and exercises' courses, and I believe to<br />
use Haskell much more after the course's end.<br />
<br />
This course is optional in the third or fourth year, and is taken by a<br />
small-to-medium sized group of students.<br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:Olof.Johanssson@cs.umu.se Olof Johansson], Umeå Univesity, Department of Computing Science<br><br />
<b>Course:</b> Programming language semantics<br><br />
<b>Student background:</b> two terms of computer science studies and specificaly a course Programming language concepts<br><br />
<b>Materials:</b> Hugs and some HBC and GHC; Watt, Programming language, Syntax and Semantics<br><br />
<b>Web page:</b> http://www.cs.umu.se/local/kurser/TDBC05 (Only in swedish)<br> <br />
<br />
<br />
<b>Instructor:</b> [mailto:lyndon@cs.uwa.edu.au Lyndon While]<br />
The University of Western Australia<br><br />
<b>Course:</b> Functional Programming<br><br />
<b>Student background:</b> OOP, plus most of them have used Haskell previously<br><br />
<b>Materials:</b> hugs 98; none of the recent books really fit<br><br />
<b>Web page:</b> http://undergraduate.cs.uwa.edu.au/courses/230.301<br><br />
<b>Instructor:</b> [mailto:F.A.Rabhi@dcs.hull.ac.uk Fethi Rabhi],<br />
University of Hull (UK)<br><br />
<b>Course:</b> AI Problem Solving Techniques (using Haskell and Prolog)<br><br />
<b>Student background:</b> Haskell and Prolog programming<br><br />
<b>Materials:</b> HUGS; Thompson'96, own notes (soon to be published as a book).<br><br />
<b>Web page:</b> none<br><br />
<b>Comments:</b><br />
<blockquote><br />
It is very hard to justify learning Haskell unless it can be<br />
demonstrated in very practical situations (hence the provision<br />
of the above course).<br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:karczma@info.unicaen.fr Jerzy Karczmarczuk]<br />
University of Caen, Caen (France)<br> No links in the fr-Haskell page. Why not ?<br />
<b>Course:</b> Compilation<br><br />
<b>Student background:</b> General CS knowledge; students (should...) know Scheme and imperative languages, also some theory of languages and automata.<br><br />
<b>Materials:</b> <br />
Hugs, GHC, now also GHCi, and their documentation. Handouts: (still a little incomplete)<br />
Impossible to find the foolowing matterials.Files can not be found. <br />
* http://users.info.unicaen.fr/~karczma/matrs/Maitcomp/compilation_a.pdf<br />
* http://users.info.unicaen.fr/~karczma/matrs/Maitcomp/compilation_b.pdf<br />
* http://users.info.unicaen.fr/~karczma/matrs/Maitcomp/compilation_c.pdf<br />
<b>Comments:</b><br />
<blockquote><br />
This is a compulsory semestrial course in fourth year. Weekly: 1.5h<br />
course, 2.5H practice.<br />
One, but comprehensive assignment, taking 2 months or more.<br />
askell is our main coding tool. A little time is devoted by necessity<br />
to the language<br />
itself, but also from the perspective: "how would you compile such a<br />
language".<br />
"Standard stuff", such as parsing combinators, etc.is covered, but we<br />
don't begin with that.<br />
We start with the construction of small interpreters: from recursive<br />
Lisp-style to postfix,<br />
(Forth/PostScript style) constructing this last by partial evaluation<br />
(intuitively).<br />
We introduce control structures as lazy functions, operation<br />
sequencing through continuations,<br />
monads not only for parsing, but also for exceptions and<br />
non-determinism.<br />
We discuss (simply) the type inference. The code generator assembles a<br />
linear code by lazy<br />
concatenation of chunks which makes it trivial to deal with loops and<br />
cross-referencing<br />
fragments. Algorithms of garbage collection are presented (not<br />
implemented, though...) in<br />
a purely functional style.<br />
<br />
Students' opinion: "Frightening at first. Learning curve steep, but<br />
much less time spent on debugging, coding proficiency comes fast. Good for<br />
understanding what the compilation is about, but difficult to make a<br />
complete running program with all the I/O, etc.<br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:jeffm@cse.uconn.edu Jeffrey A. Meunier], University of Connecticut<br><br />
<b>Course:</b> CSE240 Intermediate Computer Systems<br><br />
<b>Student background:</b> computer/microprocessor organization<br />
<br><br />
<b>Materials:</b> Hugs (Feb 2001); Bird ``Introduction to Functional<br />
Programming''; Furber ``ARM System-on-Chip Architecture''<br />
<br><br />
<b>Web page:</b> http://www.engr.uconn.edu/~jeffm/Classes/CSE240-Spring-2001/index.html<br> <br />
<b>Comments:</b><br />
<blockquote><br />
This is a course in the low level programming of microprocessor systems.<br />
The course will focus on the development of an emulator (virtual<br />
machine, or VM) for a small computer system based on a modern RISC<br />
microprocessor (the ARM CPU) using a high level programming language<br />
(Haskell), and assembly language programming of the VM. Development of<br />
the VM will occur in stages, starting with the simple direct-execution<br />
(stream-based) model, gradually moving to a more realistic memory-mapped<br />
model, including exception handlers, concurrent processes, and<br />
asynchronous external devices.<br />
</blockquote><br />
<br />
<b>Instructor:</b> Gabriele Keller<br />
The University of New South Wales<br><br />
<b>Course:</b> Concepts of Programming Languages<br><br />
<b>Student background:</b> Most of them have used Haskell in first year<br><br />
<b>Materials:</b> GHC, TaPL and `Programming Languages: Theory and Practice', papers<br><br />
<b>Web page:</b> http://www.cse.unsw.edu.au/~cs3161<br><br />
<b>Last run:</b> 2006<br><br />
<b>Comments:</b><br />
<blockquote><br />
Expose students to a theory of programming languages based on type<br />
theory and operational semantics as a mathematically sound framework<br />
which allows us to investigate the properties of a large number of<br />
programming language features, including:<br />
<br />
* on semantics of different programming languages and programming paradigms: imperative, object oriented, and declarative.<br />
* theoretical foundations of programming languages: syntax, operatational, axiomatic and denotational semantics.<br />
* implementation aspects of central language features, such as dynamic and strong typing, polymorphism, overloading and automatic memory management<br />
<br />
Assignments are in GHC/Haskell, and in the past have included implementing a<br />
mini-Haskell type checker, type inference and interpreter.<br />
</blockquote><br />
<br />
<b>Instructor:</b> Manuel Chakravarty<br />
The University of New South Wales<br><br />
<b>Course:</b> Advanced Functional Programming<br><br />
<b>Student background:</b> Most of them have used Haskell in first year<br><br />
<b>Materials:</b> GHC, papers (see the website)<br><br />
<b>Web page:</b> http://www.cse.unsw.edu.au/~cs4132<br><br />
<b>Last run:</b>2004<br><br />
<b>Comments:</b><br />
<blockquote><br />
To provide students with an understanding of the theory and practice of<br />
the design, use, and implementation of functional programming languages,<br />
such as Haskell<br />
<br />
This includes selected topics from the following areas:<br />
<br />
* Foundations: lambda calculus, semantics, and type systems.<br />
* Design: side-effects, exceptions, concurrency, and parallelism.<br />
* Implementation: abstract machines, program transformation, and memory management. <br />
* Programming techniques: combinator libraries, monads, generic programming, and meta programming.<br />
* Applications: domain specific languages, graphics, web programming, reactive systems, and scientific programming.<br />
</blockquote><br />
<br />
[[Category:Community]]</div>Aivanhttps://wiki.haskell.org/index.php?title=Haskell_in_education&diff=55914Haskell in education2013-05-13T14:26:57Z<p>Aivan: /* Haskell as a second language */</p>
<hr />
<div>[[Category:Education]]<br />
This is a collection of material of interest to those teaching or<br />
taking courses that use Haskell. There is also a more general site,<br />
http://www.cs.kun.nl/fple/, devoted to all functional languages. The proceedings of the latest<br />
[http://www.informatik.uni-kiel.de/~mh/publications/reports/fdpe02/ International Workshop on Functional and Declarative Programming in Education (FDPE)] are now available.<br />
Some of the lecture notes and<br />
other course material found in these web pages are excellent<br />
supplements to the available text books.<br />
If you would like to use lecture<br />
notes, assignments, or other material found in these course web pages<br />
please contact the author for permission.<br />
<br />
Most of the entries are years old. When you add your own new<br />
material to this page, please also say when the course was run for the last time.<br />
<br />
The results of a survey of university courses using Haskell in the academic year 2005-2006 can be found [http://www.cs.chalmers.se/~rjmh/Wash/Survey/teaching.htm here]. Also, some news were added during the 2006-2007 academic year.<br />
<br />
== Suitable Course Textbooks ==<br />
<br />
See [[Books#Textbooks]].<br />
<br />
== Haskell as a first language ==<br />
<br />
These courses teach Haskell to students with no background in programming.<br />
<br />
<b>Instructor:</b> [http://homepages.inf.ed.ac.uk/wadler/ Philip Wadler] University of Edinburgh<br><br />
<b>Course:</b> [[Informatics 1 - Functional Programming]]<br><br />
<b>Materials:</b> GHCi, Emacs, Thompson: Haskell, the Craft of Functional Programming<br><br />
<b>Web page:</b> http://www.inf.ed.ac.uk/teaching/courses/inf1/fp/ <br><br />
<br />
<br />
<b>Instructor:</b> [mailto:page@ou.edu Rex Page] <br />
University of<br />
Oklahoma<br><br />
<b>Course:</b> Introduction to Computer Programming<br><br />
<b>Student background:</b> High-school mathematics<br><br />
<b>Materials:</b> Projects, Exams, Downloadable textbook: Rex Page, <br />
&quot;Two<br />
Dozen Short Lessons in Haskell&quot;<br><br />
<b>Web page:</b> http://www.cs.ou.edu/~rlpage/fpclassSpring97/<br />
<br />
<b>Comments:</b><br />
<blockquote><br />
These materials arose from a course offered for three consecutive<br />
semesters as<br />
an alternative to our usual first course in programming. Most of the<br />
students<br />
who took the course graduated in the past two years, and many of them<br />
cited it<br />
in the exit interview with the department chair as the most influential<br />
course<br />
in the entire academic career.<br />
<p>All materials for two offerings of the course are available through<br />
the web<br />
page. This includes individual projects, team projects, project<br />
solutions,<br />
exams, supplied software (connected with certain projects), tips for<br />
students<br />
taking the course, FAQs addressing questions that students asked during<br />
the<br />
semester, and a short textbook which served as the primary text in the<br />
course.</p><br />
<p>The first 10 to 11 weeks of the course use Haskell. Students are<br />
required to<br />
write nine programs in Haskell, three of which are team projects that<br />
combine<br />
software developed in individual projects. Different members of a team<br />
are<br />
assigned different individual projects, and the team efforts combine<br />
their<br />
solutions into a working piece of software.</p><br />
<p>In the early part of the course, students use operators like map,<br />
foldr, zip,<br />
and iterate to express computations. Explicit recursion is introduced<br />
after some<br />
experience with these common patterns of computation. Examples and<br />
problems<br />
address non-numeric applications, for the most part. Both interactive<br />
and file<br />
I/O are covered, but general purpose monads are not.</p><br />
<p>The last 5 to 6 weeks of the course use C, and most of the projects<br />
in that<br />
part of the course duplicate the function of earlier pieces of software<br />
that the<br />
students have written in Haskell.</p><br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:Jonathan.Hill@comlab.ox.ac.uk Jonathan Hill]<br />
Oxford University Computing Laboratory<br><br />
<b>Course:</b> Functional Programming for the Integrated Graduate Development Programme in Software Engineering at Oxford University.<br><br />
<b>Student background:</b> Discrete mathematics (the course is a part time MSc for people from industry; most are from IBM or Nortel).<br><br />
<b>Materials:</b> Gofer (an old version, with a stripped down prelude---no parameter classes!); Own course material<br><br />
<b>Web page:</b> http://www.comlab.ox.ac.uk/igdp/text/course06.html<br />
Note: Web pages not accessible. May be ... moved ? <br />
<br />
<br />
<b>Instructor:</b> [mailto:nxg@cs.nott.ac.uk Neil Ghani]<br />
School of Computer Science, University of Nottingham<br><br />
<b>Course:</b> Functional Programming<br><br />
<b>Student background:</b> None<br><br />
<b>Materials:</b> Hugs; Graham Hutton, Programming in Haskell; own lecture slides<br><br />
<b>Web page:</b> http://www.cs.nott.ac.uk/~nxg/G51FUN06/fun.html<br />
<br />
<b>Instructor:</b> [mailto:prins@cs.unc.edu" Jan Prins]<br />
UNC Chapel Hill<br><br />
<b>Course:</b> Introduction to Functional Programming<br><br />
<b>Student background:</b> solid background in high-school science and mathematics<br><br />
<b>Materials:</b> Hugs 1.4 incl. Active Haskell, FRAN and [[Haskore]]; Simon Thompson, "Haskell: The Art of Functional Programming"<br><br />
<b>Web page:</b> http://www.cs.unc.edu/~prins/Classes/15/<br><br />
<b>Comments:</b><br />
<blockquote><br />
(Introductory programming course for CS and math/science majors, typically Freshman and Sophomores. Class size ~60)<br />
<br />
Our undergraduate computing environment is now largely<br />
PCs running Windows NT. We use NTEmacs as the programming<br />
environment with a slightly modified version of Emacs hugs<br />
mode with hugs running as a subprocess. The combined<br />
hugs/NTEmacs/Active Haskell distribution (available through<br />
course home page) is installed on 400+ public Win NT machines<br />
on campus and some unknown number of student-owned Win 95/98<br />
machines.<br />
<br />
This arrangement is new this semester, but so far has been<br />
working well. Keystroke-oriented interactive applications<br />
may be problematic with hugs running in NTEmacs shell mode.<br />
<br />
I'm planning assignments using Fran and Active Haskell and<br />
will try teaching the "brief introduction to imperative<br />
programming" at the end of the class using monads. I would<br />
be interested in talking with anyone who has experience or<br />
suggestions along these lines.<br />
<br />
I took a cue from Paul Hudak and others and have occasional<br />
appearances of MS Agents during lectures to wake students up!<br />
<br />
This is my first time teaching this course, and I would<br />
enjoy talking to others teaching at a similar level. A<br />
cursory search on the web didn't reveal many courses<br />
in this category.<br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:dave@cs.chalmers.se David Sands]<br />
University of Gothenburg & Chalmers University of Technology<br><br />
<b>Course:</b> Programmering för Naturvetare<br><br />
<b>Student background:</b> New students<br><br />
<b>Materials:</b> hugs 1.4; Simon Thompson<br><br />
<b>Web page:</b> http://www.md.chalmers.se/Cs/Grundutb/Kurser/nptah/<br><br />
<b>Comments:</b><br />
<blockquote><br />
This is the first part of a first course in programming. About 16<br />
lectures, each 2x45 mins plus weekly exercise classes and three<br />
assessed programming exercises. Most of my materials are in English.<br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:M.A.Rodrigues@dcs.hull.ac.uk Marcos A Rodrigues]<br />
The University of Hull, Hull, UK<br><br />
<b>Course:</b> Functional and Logic Programming<br><br />
<b>Student background:</b> none<br><br />
<b>Materials:</b> hugs 1.4; Haskell: the Craft of Functional Programming. Thompson S., Addison Wesley, 1996.<br><br />
<br />
<b>Instructor:</b> [mailto:Torsten.Grust@uni-konstanz.de Torsten Grust]<br />
University of Konstanz (Germany)<br> <br />
<b>Course:</b> Deklarative Programmierung (Declarative Programming, in german)<br><br />
<b>Student background:</b> basic math, no programming background required<br><br />
<b>Materials:</b> Hugs 1.4; (~300) slides available from the course web page;<br />
Jeroen Fokker's classroom text: Functional Programming<br />
http://www.cs.uu.nl/~jeroen/courses/fp-eng.ps.gz</a>;<br />
Richard Bird, Phil Wadler: Introduction to Functional Programming; Simon Peyton-Jones: Implementation of Functional Programming Languages<br><br />
<b>Web page:</b> http://www.fmi.uni-konstanz.de/dbis/Courses-old/Courses-ss98/decl-ss98.html<br><br />
<b>Comments:</b><br />
<blockquote><br />
The course is in German only (sorry about that). It additionally<br />
features an introduction to logical programming and Prolog.<br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:richardb@cse.unsw.edu.au Richard Buckland]<br />
University of New South Wales<br><br />
<b>Course:</b> Computing 1A<br><br />
<b>Student background:</b> Mixed, some have no computing<br />
background. This is our cs1 subject.<br><br />
<b>Materials:</b> Hugs 1.4; Simon Thompson<br><br />
<b>Web page:</b> http://www.cse.unsw.edu.au/~cs1011<br><br />
<br />
<br />
<b>Instructor:</b> [mailto:robert@techfak.uni-bielefeld Robert Giegerich], Stefan Posch, University Bielefeld, Germany<br><br />
<b>Course:</b> Introduction to Computer Science<br><br />
<b>Student background:</b> Completed High School (Abitur)<br><br />
<b>Materials:</b> Hugs; Class Notes by Robert Giegerich and Ralf Hinze<br><br />
<b>Comments:</b><br />
<blockquote><br />
Our first semester course<br />
uses Haskell as a vehicle to fundamental aspects of computation:<br />
algorithmics, specification and verification, efficiency analysis,<br />
programming methods. This works wonderfully. We do not require previous<br />
or additional programming experience. Haskell is quickly learned, <br />
to the necessary degreee; we make no attempt to cover the full language.<br />
This is NOT a Haskell course! Haskell allows us to speak about concepts<br />
of computer science WITHOUT a lot of language learning. And Haskell<br />
even helps to keep out detrimental habits from previous programming<br />
experience, as well as motivational problems resulting from the widely<br />
differing previous experiences of our incoming students.<br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:hj@sm.luth.se Håkan Jonsson] Luleå University of Technology, Sweden<br><br />
<b>Course:</b> SMD001, functional programming<br><br />
<b>Student background:</b> <br />
None. This is the very first programming course <br />
our students take.<br><br />
<b>Materials:</b> <br />
Materials: Simon Thompson's Haskell book + 7 laboratory/programming <br />
assignments using Hugs.<br />
<br><br />
<b>Web page:</b>http://www.sm.luth.se/csee/courses/smd/001/ (mostly Swedish)<br> <br />
<br />
<br />
<b>Instructor:</b> [mailto:Clem.Baker-Finch@cs.anu.edu.au Clem Baker-Finch, Australian National University<br><br />
<b>Course:</b>Introduction to Programming and Algorithms<br><br />
<b>Student background:</b> No programming background was<br />
assumed.<br />
<br><br />
<b>Materials:</b> GHC, GHCi, Simon Thompson 1st ed., my own materials. <br />
<br><br />
<b>Web page:</b> http://cs.anu.edu.au/Student/comp1100/<br> <br />
<b>Comments:</b><br />
<blockquote><br />
The first 75% of the course is basic programming concepts using Haskell. The remainder covers the same concepts in Java. This is reinforced - hopefully - by the third assignment (in Java) being the same as the first assignment (in Haskell). The aim is to provide a managed transition to the course which follows in second semester. Another point of possible interest is the use of a simple graphics library, ANUPlot, built on top of the OpenGL binding. See http://code.google.com/p/anuplot/<br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:lyndon@cs.uwa.edu.au Lyndon While] The University of Western Australia<br><br />
<b>Course:</b> Foundations of Computer Science<br><br />
<b>Student background:</b> None<br><br />
<b>Materials:</b> hugs 98; Thompson.<br><br />
<b>Web page:</b> http://undergraduate.cs.uwa.edu.au/courses/230.123<br><br />
<br />
<br />
<b>Instructor:</b> [http://www.cs.us.es/~jalonso José A. Alonso Jiménez] Dept of Computer Science and A.I., University of Seville, Spain<br><br />
<b>Course:</b> Informatics (Inform&aacute;tica, in spanish)<br><br />
<b>Student background:</b> None. This is the very first programming course <br />
our students take.<br><br />
<b>Materials:</b> GHCi, Emacs, Graham Hutton: &quot;Programming in Haskell&quot;, Slides, Exercises, Exams <br><br />
<b>Web page:</b> http://www.cs.us.es/~jalonso/cursos/i1m (in spanish)<br><br />
<b>First run:</b> 2009–2010<br><br />
<b>Last run:</b> 2012–2013<br />
<br />
----<br />
<br />
== Haskell as a second language ==<br />
<br />
These courses teach Haskell to students that have already learned<br />
another language.<br />
<br />
<b>Instructor:</b> [mailto:page@ou.edu Rex Page]<br />
University of Oklahoma<br><br />
<b>Course:</b> Discrete Mathematics<br><br />
<b>Student background:</b> High-school mathematics, introductory programming<br />
course (any language)<br><br />
<b>Materials:</b> Lecture notes, Projects, Exams, Solutions, Proof checking<br />
tools, etc.; text: Hall and O'Donnell, &quot;Discrete Mathematics with a<br />
Computer&quot;<br><br />
<br />
<b>Web page:</b> http://www.cs.ou.edu/~beseme/<br><br />
<b>Comments:</b><br />
<blockquote><br />
Lecture notes comprise over 350 animated slides (all both PowerPoint and<br />
PDF<br />
formats). About two-thirds of the material centers around mathematical logic.<br />
After the introduction of predicates, all of the examples in the logic<br />
portion<br />
of the course involve reasoning about properties of software, most of which is<br />
expressed in Haskell (a few are conventional looping functions).<br />
<p>Software examples include sum, sequence concatenation, logical operations on<br />
sequences, the Russian peasant algorithm, insertion and lookup in AVL <br />
trees, and<br />
other computations. Most of the properties verified relate to aspects of <br />
program<br />
correctness, but resource utilization properties are also verified in <br />
some<br />
cases. Several semesters worth of exams (finals and exams given during <br />
the term)<br />
are provided. The slides have matured through several offerings of the course.</p><br />
<p>The remaining third of the course discusses other standard topics<br />
in discrete<br />
mathematics, such as sets, functions, relations, trees, and counting.<br />
The web<br />
page provides access to a preview of the material. Exams and solutions are<br />
protected by a login procedure (to increase the comfort level of<br />
instructors<br />
wishing to use them in courses). The web page provides a link through<br />
which<br />
instructors may gain access to the full website.</p><br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:labra@lsi.uniovi.es Jose Emilio Labra Gayo],<br />
Dept. of Computer Science (EUITIO) University of Oviedo<br><br />
<b>Course:</b> Logic and Functional Programming<br><br />
<b>Student background:</b> The course is oriented towards third year undergraduate students in computer science. Usually, the students have been<br />
introduced to imperative languages like Pascal and Object <br />
Oriented Languages like C++<br><br />
<b>Materials:</b> Hugs; R. Bird "Introd. to FP using Haskell" (2nd Ed), J. E. Labra Gayo. "Introduction to the Haskell Language" (in spanish).<br><br />
<b>Web page:</b> http://lsi.uniovi.es/~labra/plf.html (in spanish).<br />
My FP page: http://lsi.uniovi.es/~labra/FuncProg.html<br><br />
<br />
<br />
<b>Instructor:</b> [mailto:fruehr@willamette.edu Fritz Ruehr]<br />
Willamette University, Salem, Oregon, USA (a small Liberal Arts College, about 1 hour from Portland & OGI)<br><br />
<b>Course:</b> CS 451 Topics in Computer Science: Functional Programming<br><br />
<b>Student background:</b> Data structures (I may also have required discrete math)<br><br />
<b>Materials:</b> Hugs 1.4 beta (I also taught Scheme); Haskell: The Craft of Functional Programming by Simon Thompson (I also used my own on-line lecture notes and labs and Kent Dybvig's text on Scheme)<br><br />
<b>Web page:</b> http://www.willamette.edu/~fruehr/451/<br><br />
<b>Comments:</b><br />
<blockquote><br />
The notes and labs I have on-line are in pretty rough form: many slide <br />
points are just one-line topical stubs I used as reminders in lecture.<br />
Many of the on-line materials are not linked into the (out of date)<br />
home page.<br />
<br />
I hope to have the course approved for next Fall as a regular offering<br />
(i.e., not as a "special topic") and should have more extensive<br />
on-line materials up by then.<br />
<br />
Teaching "bi-lingually" in Haskell and Scheme seemed like a good idea<br />
at the time, but next time around I will use Haskell as the main vehicle,<br />
perhaps taking some time near the end of the course to highlight some<br />
other languages (Scheme, ML, Clean).<br />
<br />
Some of my students used Conal Elliot's Fran and Paul Hudak's Haskore<br />
and liked them a lot; I was nice to have some significantly-sized<br />
applications that seemed more practical and fun to show off at the end<br />
of the course (I should have demonstrated these things at the beginning<br />
of the course to help with motivation). Next time around I would like to<br />
have a "beginner's prelude" or similar available to avoid problems with<br />
classes in type inference, Int vs. Integer, etc. These problems were a<br />
constant annoyance during lectures.<br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:J.Hamer@cs.auckland.ac.nz John Hamer],<br />
University of Auckland<br><br />
<b>Course:</b> Logic and Functional Programming<br><br />
<b>Student background:</b> Year 2 programming + some discrete maths<br><br />
<b>Materials:</b> Hugs 98, Haskell School of Expression, Page "Two Dozen Short Lessons in Haskell",<br><br />
<b>Web page:</b> http://www.cs.auckland.ac.nz/compsci360fc<br><br />
<br />
<br />
<b>Instructor:</b> [mailto:lengauer@fmi.uni-passau.de Chris Lengauer]<br />
University of Passau<br><br />
<b>Course:</b> Functional Programming<br><br />
<b>Student background:</b> two years of CS study<br><br />
<b>Materials:</b> hugs; Richard Bird's new text (PHI)<br><br />
<b>Web page:</b> not reachable from outside Passau<br><br />
<br />
<br />
<b>Instructor:</b> [mailto:cunningham@cs.olemiss.edu Conrad Cunningham]<br />
University of Mississippi<br><br />
<b>Course:</b> Functional Programming<br><br />
<b>Student background:</b> official -- senior or graduate standing; actual -- introductory programming, data structures, and discrete math<br><br />
<b>Materials:</b> Hugs on Unix and MS Windows systems;<br />
Mostly use the instructor's own set of lecture notes. Also Simon Thompson's HASKELL: THE CRAFT OF FUNCTIONAL PROGRAMMING. Previously used the Bird and Wadler textbook<br><br />
<b>Web page:</b> http://www.cs.olemiss.edu/~hcc/csci555/<br><br />
<b>Comments:</b><br />
<blockquote><br />
Although I am not a researcher in FP, I enjoy teaching the FP course.<br />
Most of the students take to the course after a few weeks. Hugs works<br />
reasonably well, but, of course, more pedagogically oriented error messages<br />
and other support tools would be helpful.<br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:leavens@cs.iastate.edu Gary T. Leavens],<br />
Iowa State University<br><br />
<b>Course:</b> Programming Languages 1<br><br />
<b>Student background:</b> undergraduate course in compilers or programming languaages<br><br />
<b>Materials:</b> Hugs 1.4; Thompson's Haskell: The Craft of Programming<br><br />
<b>Web page:</b> http://www.cs.iastate.edu/~leavens/ComS541.html<br><br />
<b>Comments:</b><br />
<blockquote><br />
Be sure to tell your students how to debug programs.<br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:jtod@dcs.gla.ac.uk John O'Donnell]<br />
University of Glasgow<br><br />
<b>Course:</b> Functional Programming<br><br />
<b>Student background:</b> Programming (in Ada), Algorithmic Foundations<br><br />
<b>Materials:</b> Hugs; Simon Thompson's book on Haskell<br><br />
<b>Web page:</b> http://www.dcs.gla.ac.uk/courses/teaching/level2/modules/#FP2<br><br />
<br />
<b>Instructor:</b> [mailto:chitil@informatik.rwth-aachen.de Olaf Chitil],<br />
RWTH Aachen, Germany<br><br />
<b>Course:</b> Functional Programming in Haskell<br><br />
<b>Student background:</b> basic programming skills (not necessarily in a<br />
functional language)<br><br />
<b>Materials:</b> Hugs 1.4; Hugs user manual, slide copies;<br />
additionally the `Gentle Introduction to Haskell', probably Bird's `Introduction<br />
to Functional Programming using Haskell' in the future.<br><br />
<b>Web page:</b> http://www-i2.informatik.rwth-aachen.de/Praktikum/SWP/ (in German)<br><br />
<b>Comments:</b><br />
<blockquote><br />
The course starts with 4 full time days of learning Haskell. During the semester<br />
the students (in groups of 2 students) have to implement a compiler and an<br />
abstract machine for a simple imperative language. They are given parts of the<br />
system and a manual on how to do the remaining parts (they have no prior<br />
knowledge on compiler construction).<br />
The most difficult construct for students to understand is the monad. I<br />
introduce IO without mentioning monads. Later I explain how to build a simple<br />
exception handling system based on the type `Maybe a' / `Error a'. Only<br />
subsequently I give the general definition of monads and present the list monad<br />
and a simple state monad. However, I fear that just to understand the bind<br />
operator `>>=' requires people to be quite comfortable with higher-order<br />
functions.<br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [http://web.comlab.ox.ac.uk/oucl/people/richard.bird.html Richard Bird], Oxford Brookes University<br><br />
<b>Course:</b> Functional Programming<br><br />
<b>Student background:</b> Elementary structured programming<br><br />
<b>Web page:</b> http://web.comlab.ox.ac.uk/oucl/courses/topics00-01/fp/<br><br />
<br />
<br />
<b>Instructor:</b> [mailto:paul.hudak@yale.edu Paul Hudak],<br />
Yale University, Dept of Computer Science<br><br />
<b>Course:</b> Functional Programming<br><br />
<b>Student background:</b> at least one programming course<br><br />
<b>Materials:</b> Hugs; my own textbook, which is under preparation<br><br />
<b>Web page:</b> none<br><br />
<br />
<br />
<b>Instructor:</b> [mailto:abf@cs.ucc.ie Alex Ferguson]<br />
University College Cork<br><br />
<b>Course:</b> Functional and Logic Programming<br><br />
<b>Student background:</b> Final year undergraduate<br />
<br><br />
<b>Materials:</b> Final year undergraduate<br />
Materials: Hugs 98; ghc; Simon Thompson, "Haskell: The Craft of<br />
Functional Programming" (2nd ed.)<br />
<br><br />
<b>Web page:</b> http://yeats.ucc.ie/~abf/CS4001/<br> <br />
<b>Comments:</b><br />
<blockquote><br />
This is the declarative programming option for 4th year<br />
undergrads, who have Java as a first programming language, and some<br />
knowledge of C and C++. The current final year have had some exposure<br />
to Haskell in first year, though this is no longer the case for our<br />
current intake.<br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:lky@nada.kth.se Leif Kusoffsky],<br />
Royal Institute of Technology, Stockholm<br><br />
<b>Course:</b> Functional Programming 2D1370<br><br />
<b>Student background:</b> The course is oriented towards third year<br />
undergraduate students in computer science. The students<br />
have been introduced to imperative languages like<br />
C and Object Oriented Languages like Java<br />
<br><br />
<b>Materials:</b> Hugs; Hudak : The Haskell School of Expression<br />
<br><br />
<br />
<br />
<b>Instructor:</b> Jeremy Bobbio -- INSIA<br><br />
<b>Course:</b> Functional and Logic Programming<br><br />
<b>Student background:</b> One year CS<br />
<br><br />
<b>Materials:</b> <br />
Hugs, GHC, Paul Hudak's Haskell School of Education<br />
<br><br />
<b>Web page:</b> http://etudiants.insia.org/~jbobbio/pafp/ (french)<br> <br />
<br />
<br />
<b>Instructor:</b> [mailto:antkaij@mit.jyu.fi Antti-Juhani Kaijanaho]<br />
University of Jyväskylä<br><br />
<b>Course:</b> Functional Programming 1 & 2<br><br />
<b>Student background:</b> third-year undergraduate and up<br />
<br><br />
<b>Materials:</b><br />
GHC, Gtk2HS<br />
<br><br />
<b>Web page:</b> [http://www.mit.jyu.fi/antkaij/opetus/fo/2005-2006/index.en.html]<br />
<br><br />
<b>Last run:</b> 2005&ndash;2006<br />
<br><br />
<!--<b>Comments:</b><br />
<blockquote><br />
(I'll write this later)<br />
</blockquote>--><br />
<br />
<b>Instructor:</b> [mailto:djd@comp.leeds.ac.uk David Duke]<br />
University of Leeds, School of Computing<br><br />
<b>Course:</b> Functional Programming<br><br />
<b>Student background:</b> Second and third year undergraduate<br />
<br><br />
<b>Materials:</b> ghc; Graham Hutton "Programming in Haskell"<br />
<br><br />
<b>Web page:</b> www.comp.leeds.ac.uk/se23/<br> <br />
<b>Comments:</b><br />
<blockquote><br />
This is an optional course that students currently can take in <br />
second or third year (from 2008/9 it will be third-years only).<br />
Students will have previously used Python and Java.<br />
Although the emphasis is on learning to solve problems within<br />
the functional paradigm, and how to develop solutions within<br />
Haskell, I also like to show students what is "under the<br />
bonnet" and conclude the module with an introduction to<br />
implementation issues, using material derived from<br />
"Implementing Functional Languages" by Simon Peyton Jones and <br />
David Lester. <br />
</blockquote><br />
<br />
<b>Instructor:</b> [mailto:popavdan@yahoo.com Popa V. Dan]<br />
University of Bacau, Romania <br><br />
<b>Course:</b> "Limbaje formale si automate" (Formal languages and automata) <br><br />
<b>Student background:</b> second-year undergraduate <br />
<br><br />
<b>Materials:</b> Hugs 98 (2002 revised version) included in Mandriva (Formely Mandrake) 10.0 Linux Distribution<br />
<br><br />
<b>Web page:</b> Not yet. Try the page of the "ro" community on www.haskell.org<br />
<br> [http://www.haskell.org/haskellwiki/Ro/Haskell Ro/Haskell webpage is here] <br><br />
<b>First run:</b> 2006&ndash;2007<br />
<br><br />
<br />
Haskell is used as an implementation languages in student's laboratories.<br />
The ideea was to provide a language powerfull enough to be able to express <br />
how to build a parser starting from a grammmar. The students are able<br />
to build small (monadic) interpreters for "while-languages" using a <br />
recommanded monad and a recommanded back-end. The labs are focusing on the <br />
grammar of the languages, on the modular (monadic) parsing as a tool for <br />
verifying and processing inputs which are not validable by finite state <br />
automata but by context free grammmars. Adaptability of the language, <br />
especially obtained manipulating and improving syntax is also a target.<br />
<br />
Support (concerning Haskell): "O introducere in Haskell prin exemple" by<br />
Dan Popa, published in january 31,2007 by <br />
[http://www.edusoft.ro Edusoft](in romanian) Contact the author if needed .<br />
<br />
Other recommanded books: "Gentle Introd to Haskell 98" and YAHT <br />
Recomanded papers: All about monadic parsing. <br />
Special message for Graham Hutton, Erik Meijer and P. Wadler and all <br />
other authors with similar interests from the Haskell <br />
community:<br />
<br />
Thank you very much for your papers concerning Monadic parsing and <br />
interpreters ! <br />
<br />
'''List of instructors:'''<br />
<br />
<br />
----<br />
<br />
== Comparative programming languages ==<br />
<br />
These courses teach general programming language principles, with<br />
Haskell as an example of a functional language.<br />
<br />
<b>Instructor: </b> Ruediger Marcus Flaig, University of Heidelberg (Germany)<br />
<br><br />
<b>Course:</b> An introduction to programming in bioinformatics <br><br />
<b>Student background:</b> different, but generally low<br><br />
<b>Materials:</b> Hugs-98 and lots of other stuff<br />
<br><br />
<b>Web page:</b> http://www.sanctacaris.net/rc.html<br> <br />
<b>Comments:</b><br />
<blockquote><br />
This course is designed to introduce life science students,<br />
that is to say, going-to-be biologists, physicians, biotechnologists<br />
and maybe others, to solving real-life problems (such as DNA sequence<br />
handling and analysis). Emphasis will be on paradigms (imperative /<br />
OO, functional, declarative). Although -- in order not to frighten<br />
people -- the official announcement mentions only Python, Haskell will<br />
be presented as THE purely functional language, and all solutions may<br />
be presented in either Python, Haskell or Java. I am very curious<br />
about the feedback I'll get, and maybe next term we shall focus more<br />
on Haskell. What I'd really need, though, is some life science related<br />
package for Haskell, such as BIOPYTHON and BIORUBY. <br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:ham@cs.utexas.edu Hamilton Richards],<br />
University of Texas (Austin)<br><br />
<b>Course:</b> Programming Languages (taught in 2005)<br><br />
<b>Student background:</b> <br><br />
<b>Materials:</b> Hugs 1.4; Sethi, Davie.<br><br />
<b>Web page:</b> http://www.cs.utexas.edu/users/ham/UTCS/CS345/<br><br />
<b>Comments:</b><br />
<blockquote><br />
I'm using Haskell in a programming-languages course, but it's distributed<br />
somewhat piecemeal through the course. Probably adds up to something like<br />
3-4 weeks (out of 15).<br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [http://www.cs.waikato.ac.nz/~marku Mark Utting]<br />
University of Waikato (New Zealand)<br />
<b>Course:</b> Programming Languages<br><br />
<b>Student background:</b> Two years of C++ and 1 year of Haskell<br><br />
<b>Materials:</b> Textbook "Programming Languages", Louden.<br />
<b>Web page:</b> http://www.cs.waikato.ac.nz/~marku/313<br><br />
<b>Comments:</b><br />
<blockquote><br />
The course covers at least two languages in each of the<br />
main paradigms (object-oriented, functional and logic programming),<br />
plus history, semantics and implementation issues.<br />
The Haskell section is about 2 weeks long and usually focusses on <br />
programming with higher-order functions and how that enables the<br />
language to be extended in application-specific ways<br />
(parser combinators, html-generation combinators etc.)<br />
</blockquote><br />
<br />
<b>Instructor:</b> [mailto:zeeshan@apiit.edu.pk M Zeeshan Ali Ansari],<br />
Asia Pacific Institute of Information Technology (Pakistan)<br><br />
<b>Course:</b> Advanced Programming Language Concepts<br><br />
<b>Student background:</b> Students having studied and worked on Imperative Programming Languages <br><br />
<b>Materials:</b> The Craft of Haskell, A Gentle Introduction to Haskell, Yet Another Haskell Tutorial.<br><br />
<b>Web page:</b> http://www.apiit.edu.pk<br><br />
<b>Comments:</b><br />
<blockquote><br />
This course compares and contrasts various programming language paradigms including Functional Programming. Out of 13 week course 5 to 6 of them are dedicated towards Haskell. The material is basically written in a way that enables imperative language programmers to understand the concepts and power of functional programming <br />
<br />
http://www.haskell.org/sitewiki/images/3/3d/Functional_Programming_Tutorial_By_Zeeshan_Ali_Ansari.doc<br />
<br />
<br />
</blockquote><br />
<br />
<b>Instructor:</b> John C. Mitchell,<br />
Stanford University<br><br />
<b>Course:</b> Programming Languages<br><br />
<b>Student background:</b> Some experience with Lisp/C/object-oriented languages.<br><br />
<b>Materials:</b> Concepts in Programming Languages (new Haskell chapters written with Kathleen Fisher)<br><br />
<b>Web page:</b> http://cs242.stanford.edu<br><br />
<b>Comments:</b><br />
<blockquote><br />
Central concepts in modern programming languages, impact on software development, language design trade-offs, and implementation considerations. Functional, imperative, and object-oriented paradigms. Formal semantic methods and program analysis. Modern type systems, higher order functions and closures, exceptions and continuations. Modularity, object-oriented languages, and concurrency. Runtime support for language features, interoperability, and security issues. <br />
</blockquote><br />
<br />
----<br />
<br />
== Advanced functional programming using Haskell ==<br />
<br />
These courses deal with the advanced issues such as semantics, type<br />
systems, or compilers. Includes a other advanced courses taught using<br />
Haskell. <br />
<br />
<b>Instructor:</b> [mailto:gmh@cs.nott.ac.uk Graham Hutton]<br />
School of Computer Science, University of Nottingham<br><br />
<b>Course:</b> Advanced Functional Programming<br><br />
<b>Student background:</b> At least one year of CS, including a course in Haskell<br><br />
<b>Materials:</b> Hugs; GHC; Graham Hutton, Programming in Haskell; own course material<br><br />
<b>Web page:</b> http://www.cs.nott.ac.uk/~gmh/afp.html<br />
<br />
<b>Instructor:</b> [mailto:rjmh@cs.chalmers.se John Hughes]<br />
Chalmers University, Gothenburg<br><br />
<b>Course:</b> Advanced Functional Programming<br><br />
<b>Student background:</b> General CS maturity; from this year most students have already used Haskell in introductory courses.<br><br />
<b>Materials:</b> Mainly hbc.; Papers (see web page)<br><br />
<b>Web page:</b> http://www.cs.chalmers.se/~rjmh/AFP<br><br />
<b>Comments:</b><br />
<blockquote><br />
The goal is to teach students how to solve substantial problems in a<br />
functional language --- `functional programming in anger', one might say. The<br />
emphasis is on design and use of suitable combinator libraries to simplify<br />
applications. Material covered includes monad design, use of CPS style,<br />
libraries for parsing, pretty-printing, and GUIs (presently fudgets). <br />
<br />
The course is taught in a `problem based' manner: lectures are few, while<br />
students solve three substantial programming problems during the term, with<br />
plenty of backup via group meetings. I adopted this teaching form three years<br />
ago, and it has led students to develop far better practical skills than most<br />
obtained from my earlier `lectures and exercises' courses, and I believe to<br />
use Haskell much more after the course's end.<br />
<br />
This course is optional in the third or fourth year, and is taken by a<br />
small-to-medium sized group of students.<br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:Olof.Johanssson@cs.umu.se Olof Johansson], Umeå Univesity, Department of Computing Science<br><br />
<b>Course:</b> Programming language semantics<br><br />
<b>Student background:</b> two terms of computer science studies and specificaly a course Programming language concepts<br><br />
<b>Materials:</b> Hugs and some HBC and GHC; Watt, Programming language, Syntax and Semantics<br><br />
<b>Web page:</b> http://www.cs.umu.se/local/kurser/TDBC05 (Only in swedish)<br> <br />
<br />
<br />
<b>Instructor:</b> [mailto:lyndon@cs.uwa.edu.au Lyndon While]<br />
The University of Western Australia<br><br />
<b>Course:</b> Functional Programming<br><br />
<b>Student background:</b> OOP, plus most of them have used Haskell previously<br><br />
<b>Materials:</b> hugs 98; none of the recent books really fit<br><br />
<b>Web page:</b> http://undergraduate.cs.uwa.edu.au/courses/230.301<br><br />
<b>Instructor:</b> [mailto:F.A.Rabhi@dcs.hull.ac.uk Fethi Rabhi],<br />
University of Hull (UK)<br><br />
<b>Course:</b> AI Problem Solving Techniques (using Haskell and Prolog)<br><br />
<b>Student background:</b> Haskell and Prolog programming<br><br />
<b>Materials:</b> HUGS; Thompson'96, own notes (soon to be published as a book).<br><br />
<b>Web page:</b> none<br><br />
<b>Comments:</b><br />
<blockquote><br />
It is very hard to justify learning Haskell unless it can be<br />
demonstrated in very practical situations (hence the provision<br />
of the above course).<br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:karczma@info.unicaen.fr Jerzy Karczmarczuk]<br />
University of Caen, Caen (France)<br> No links in the fr-Haskell page. Why not ?<br />
<b>Course:</b> Compilation<br><br />
<b>Student background:</b> General CS knowledge; students (should...) know Scheme and imperative languages, also some theory of languages and automata.<br><br />
<b>Materials:</b> <br />
Hugs, GHC, now also GHCi, and their documentation. Handouts: (still a little incomplete)<br />
Impossible to find the foolowing matterials.Files can not be found. <br />
* http://users.info.unicaen.fr/~karczma/matrs/Maitcomp/compilation_a.pdf<br />
* http://users.info.unicaen.fr/~karczma/matrs/Maitcomp/compilation_b.pdf<br />
* http://users.info.unicaen.fr/~karczma/matrs/Maitcomp/compilation_c.pdf<br />
<b>Comments:</b><br />
<blockquote><br />
This is a compulsory semestrial course in fourth year. Weekly: 1.5h<br />
course, 2.5H practice.<br />
One, but comprehensive assignment, taking 2 months or more.<br />
askell is our main coding tool. A little time is devoted by necessity<br />
to the language<br />
itself, but also from the perspective: "how would you compile such a<br />
language".<br />
"Standard stuff", such as parsing combinators, etc.is covered, but we<br />
don't begin with that.<br />
We start with the construction of small interpreters: from recursive<br />
Lisp-style to postfix,<br />
(Forth/PostScript style) constructing this last by partial evaluation<br />
(intuitively).<br />
We introduce control structures as lazy functions, operation<br />
sequencing through continuations,<br />
monads not only for parsing, but also for exceptions and<br />
non-determinism.<br />
We discuss (simply) the type inference. The code generator assembles a<br />
linear code by lazy<br />
concatenation of chunks which makes it trivial to deal with loops and<br />
cross-referencing<br />
fragments. Algorithms of garbage collection are presented (not<br />
implemented, though...) in<br />
a purely functional style.<br />
<br />
Students' opinion: "Frightening at first. Learning curve steep, but<br />
much less time spent on debugging, coding proficiency comes fast. Good for<br />
understanding what the compilation is about, but difficult to make a<br />
complete running program with all the I/O, etc.<br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:jeffm@cse.uconn.edu Jeffrey A. Meunier], University of Connecticut<br><br />
<b>Course:</b> CSE240 Intermediate Computer Systems<br><br />
<b>Student background:</b> computer/microprocessor organization<br />
<br><br />
<b>Materials:</b> Hugs (Feb 2001); Bird ``Introduction to Functional<br />
Programming''; Furber ``ARM System-on-Chip Architecture''<br />
<br><br />
<b>Web page:</b> http://www.engr.uconn.edu/~jeffm/Classes/CSE240-Spring-2001/index.html<br> <br />
<b>Comments:</b><br />
<blockquote><br />
This is a course in the low level programming of microprocessor systems.<br />
The course will focus on the development of an emulator (virtual<br />
machine, or VM) for a small computer system based on a modern RISC<br />
microprocessor (the ARM CPU) using a high level programming language<br />
(Haskell), and assembly language programming of the VM. Development of<br />
the VM will occur in stages, starting with the simple direct-execution<br />
(stream-based) model, gradually moving to a more realistic memory-mapped<br />
model, including exception handlers, concurrent processes, and<br />
asynchronous external devices.<br />
</blockquote><br />
<br />
<b>Instructor:</b> Gabriele Keller<br />
The University of New South Wales<br><br />
<b>Course:</b> Concepts of Programming Languages<br><br />
<b>Student background:</b> Most of them have used Haskell in first year<br><br />
<b>Materials:</b> GHC, TaPL and `Programming Languages: Theory and Practice', papers<br><br />
<b>Web page:</b> http://www.cse.unsw.edu.au/~cs3161<br><br />
<b>Last run:</b> 2006<br><br />
<b>Comments:</b><br />
<blockquote><br />
Expose students to a theory of programming languages based on type<br />
theory and operational semantics as a mathematically sound framework<br />
which allows us to investigate the properties of a large number of<br />
programming language features, including:<br />
<br />
* on semantics of different programming languages and programming paradigms: imperative, object oriented, and declarative.<br />
* theoretical foundations of programming languages: syntax, operatational, axiomatic and denotational semantics.<br />
* implementation aspects of central language features, such as dynamic and strong typing, polymorphism, overloading and automatic memory management<br />
<br />
Assignments are in GHC/Haskell, and in the past have included implementing a<br />
mini-Haskell type checker, type inference and interpreter.<br />
</blockquote><br />
<br />
<b>Instructor:</b> Manuel Chakravarty<br />
The University of New South Wales<br><br />
<b>Course:</b> Advanced Functional Programming<br><br />
<b>Student background:</b> Most of them have used Haskell in first year<br><br />
<b>Materials:</b> GHC, papers (see the website)<br><br />
<b>Web page:</b> http://www.cse.unsw.edu.au/~cs4132<br><br />
<b>Last run:</b>2004<br><br />
<b>Comments:</b><br />
<blockquote><br />
To provide students with an understanding of the theory and practice of<br />
the design, use, and implementation of functional programming languages,<br />
such as Haskell<br />
<br />
This includes selected topics from the following areas:<br />
<br />
* Foundations: lambda calculus, semantics, and type systems.<br />
* Design: side-effects, exceptions, concurrency, and parallelism.<br />
* Implementation: abstract machines, program transformation, and memory management. <br />
* Programming techniques: combinator libraries, monads, generic programming, and meta programming.<br />
* Applications: domain specific languages, graphics, web programming, reactive systems, and scientific programming.<br />
</blockquote><br />
<br />
[[Category:Community]]</div>Aivanhttps://wiki.haskell.org/index.php?title=Haskell_in_education&diff=55913Haskell in education2013-05-13T14:21:42Z<p>Aivan: /* Haskell as a second language */</p>
<hr />
<div>[[Category:Education]]<br />
This is a collection of material of interest to those teaching or<br />
taking courses that use Haskell. There is also a more general site,<br />
http://www.cs.kun.nl/fple/, devoted to all functional languages. The proceedings of the latest<br />
[http://www.informatik.uni-kiel.de/~mh/publications/reports/fdpe02/ International Workshop on Functional and Declarative Programming in Education (FDPE)] are now available.<br />
Some of the lecture notes and<br />
other course material found in these web pages are excellent<br />
supplements to the available text books.<br />
If you would like to use lecture<br />
notes, assignments, or other material found in these course web pages<br />
please contact the author for permission.<br />
<br />
Most of the entries are years old. When you add your own new<br />
material to this page, please also say when the course was run for the last time.<br />
<br />
The results of a survey of university courses using Haskell in the academic year 2005-2006 can be found [http://www.cs.chalmers.se/~rjmh/Wash/Survey/teaching.htm here]. Also, some news were added during the 2006-2007 academic year.<br />
<br />
== Suitable Course Textbooks ==<br />
<br />
See [[Books#Textbooks]].<br />
<br />
== Haskell as a first language ==<br />
<br />
These courses teach Haskell to students with no background in programming.<br />
<br />
<b>Instructor:</b> [http://homepages.inf.ed.ac.uk/wadler/ Philip Wadler] University of Edinburgh<br><br />
<b>Course:</b> [[Informatics 1 - Functional Programming]]<br><br />
<b>Materials:</b> GHCi, Emacs, Thompson: Haskell, the Craft of Functional Programming<br><br />
<b>Web page:</b> http://www.inf.ed.ac.uk/teaching/courses/inf1/fp/ <br><br />
<br />
<br />
<b>Instructor:</b> [mailto:page@ou.edu Rex Page] <br />
University of<br />
Oklahoma<br><br />
<b>Course:</b> Introduction to Computer Programming<br><br />
<b>Student background:</b> High-school mathematics<br><br />
<b>Materials:</b> Projects, Exams, Downloadable textbook: Rex Page, <br />
&quot;Two<br />
Dozen Short Lessons in Haskell&quot;<br><br />
<b>Web page:</b> http://www.cs.ou.edu/~rlpage/fpclassSpring97/<br />
<br />
<b>Comments:</b><br />
<blockquote><br />
These materials arose from a course offered for three consecutive<br />
semesters as<br />
an alternative to our usual first course in programming. Most of the<br />
students<br />
who took the course graduated in the past two years, and many of them<br />
cited it<br />
in the exit interview with the department chair as the most influential<br />
course<br />
in the entire academic career.<br />
<p>All materials for two offerings of the course are available through<br />
the web<br />
page. This includes individual projects, team projects, project<br />
solutions,<br />
exams, supplied software (connected with certain projects), tips for<br />
students<br />
taking the course, FAQs addressing questions that students asked during<br />
the<br />
semester, and a short textbook which served as the primary text in the<br />
course.</p><br />
<p>The first 10 to 11 weeks of the course use Haskell. Students are<br />
required to<br />
write nine programs in Haskell, three of which are team projects that<br />
combine<br />
software developed in individual projects. Different members of a team<br />
are<br />
assigned different individual projects, and the team efforts combine<br />
their<br />
solutions into a working piece of software.</p><br />
<p>In the early part of the course, students use operators like map,<br />
foldr, zip,<br />
and iterate to express computations. Explicit recursion is introduced<br />
after some<br />
experience with these common patterns of computation. Examples and<br />
problems<br />
address non-numeric applications, for the most part. Both interactive<br />
and file<br />
I/O are covered, but general purpose monads are not.</p><br />
<p>The last 5 to 6 weeks of the course use C, and most of the projects<br />
in that<br />
part of the course duplicate the function of earlier pieces of software<br />
that the<br />
students have written in Haskell.</p><br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:Jonathan.Hill@comlab.ox.ac.uk Jonathan Hill]<br />
Oxford University Computing Laboratory<br><br />
<b>Course:</b> Functional Programming for the Integrated Graduate Development Programme in Software Engineering at Oxford University.<br><br />
<b>Student background:</b> Discrete mathematics (the course is a part time MSc for people from industry; most are from IBM or Nortel).<br><br />
<b>Materials:</b> Gofer (an old version, with a stripped down prelude---no parameter classes!); Own course material<br><br />
<b>Web page:</b> http://www.comlab.ox.ac.uk/igdp/text/course06.html<br />
Note: Web pages not accessible. May be ... moved ? <br />
<br />
<br />
<b>Instructor:</b> [mailto:nxg@cs.nott.ac.uk Neil Ghani]<br />
School of Computer Science, University of Nottingham<br><br />
<b>Course:</b> Functional Programming<br><br />
<b>Student background:</b> None<br><br />
<b>Materials:</b> Hugs; Graham Hutton, Programming in Haskell; own lecture slides<br><br />
<b>Web page:</b> http://www.cs.nott.ac.uk/~nxg/G51FUN06/fun.html<br />
<br />
<b>Instructor:</b> [mailto:prins@cs.unc.edu" Jan Prins]<br />
UNC Chapel Hill<br><br />
<b>Course:</b> Introduction to Functional Programming<br><br />
<b>Student background:</b> solid background in high-school science and mathematics<br><br />
<b>Materials:</b> Hugs 1.4 incl. Active Haskell, FRAN and [[Haskore]]; Simon Thompson, "Haskell: The Art of Functional Programming"<br><br />
<b>Web page:</b> http://www.cs.unc.edu/~prins/Classes/15/<br><br />
<b>Comments:</b><br />
<blockquote><br />
(Introductory programming course for CS and math/science majors, typically Freshman and Sophomores. Class size ~60)<br />
<br />
Our undergraduate computing environment is now largely<br />
PCs running Windows NT. We use NTEmacs as the programming<br />
environment with a slightly modified version of Emacs hugs<br />
mode with hugs running as a subprocess. The combined<br />
hugs/NTEmacs/Active Haskell distribution (available through<br />
course home page) is installed on 400+ public Win NT machines<br />
on campus and some unknown number of student-owned Win 95/98<br />
machines.<br />
<br />
This arrangement is new this semester, but so far has been<br />
working well. Keystroke-oriented interactive applications<br />
may be problematic with hugs running in NTEmacs shell mode.<br />
<br />
I'm planning assignments using Fran and Active Haskell and<br />
will try teaching the "brief introduction to imperative<br />
programming" at the end of the class using monads. I would<br />
be interested in talking with anyone who has experience or<br />
suggestions along these lines.<br />
<br />
I took a cue from Paul Hudak and others and have occasional<br />
appearances of MS Agents during lectures to wake students up!<br />
<br />
This is my first time teaching this course, and I would<br />
enjoy talking to others teaching at a similar level. A<br />
cursory search on the web didn't reveal many courses<br />
in this category.<br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:dave@cs.chalmers.se David Sands]<br />
University of Gothenburg & Chalmers University of Technology<br><br />
<b>Course:</b> Programmering för Naturvetare<br><br />
<b>Student background:</b> New students<br><br />
<b>Materials:</b> hugs 1.4; Simon Thompson<br><br />
<b>Web page:</b> http://www.md.chalmers.se/Cs/Grundutb/Kurser/nptah/<br><br />
<b>Comments:</b><br />
<blockquote><br />
This is the first part of a first course in programming. About 16<br />
lectures, each 2x45 mins plus weekly exercise classes and three<br />
assessed programming exercises. Most of my materials are in English.<br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:M.A.Rodrigues@dcs.hull.ac.uk Marcos A Rodrigues]<br />
The University of Hull, Hull, UK<br><br />
<b>Course:</b> Functional and Logic Programming<br><br />
<b>Student background:</b> none<br><br />
<b>Materials:</b> hugs 1.4; Haskell: the Craft of Functional Programming. Thompson S., Addison Wesley, 1996.<br><br />
<br />
<b>Instructor:</b> [mailto:Torsten.Grust@uni-konstanz.de Torsten Grust]<br />
University of Konstanz (Germany)<br> <br />
<b>Course:</b> Deklarative Programmierung (Declarative Programming, in german)<br><br />
<b>Student background:</b> basic math, no programming background required<br><br />
<b>Materials:</b> Hugs 1.4; (~300) slides available from the course web page;<br />
Jeroen Fokker's classroom text: Functional Programming<br />
http://www.cs.uu.nl/~jeroen/courses/fp-eng.ps.gz</a>;<br />
Richard Bird, Phil Wadler: Introduction to Functional Programming; Simon Peyton-Jones: Implementation of Functional Programming Languages<br><br />
<b>Web page:</b> http://www.fmi.uni-konstanz.de/dbis/Courses-old/Courses-ss98/decl-ss98.html<br><br />
<b>Comments:</b><br />
<blockquote><br />
The course is in German only (sorry about that). It additionally<br />
features an introduction to logical programming and Prolog.<br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:richardb@cse.unsw.edu.au Richard Buckland]<br />
University of New South Wales<br><br />
<b>Course:</b> Computing 1A<br><br />
<b>Student background:</b> Mixed, some have no computing<br />
background. This is our cs1 subject.<br><br />
<b>Materials:</b> Hugs 1.4; Simon Thompson<br><br />
<b>Web page:</b> http://www.cse.unsw.edu.au/~cs1011<br><br />
<br />
<br />
<b>Instructor:</b> [mailto:robert@techfak.uni-bielefeld Robert Giegerich], Stefan Posch, University Bielefeld, Germany<br><br />
<b>Course:</b> Introduction to Computer Science<br><br />
<b>Student background:</b> Completed High School (Abitur)<br><br />
<b>Materials:</b> Hugs; Class Notes by Robert Giegerich and Ralf Hinze<br><br />
<b>Comments:</b><br />
<blockquote><br />
Our first semester course<br />
uses Haskell as a vehicle to fundamental aspects of computation:<br />
algorithmics, specification and verification, efficiency analysis,<br />
programming methods. This works wonderfully. We do not require previous<br />
or additional programming experience. Haskell is quickly learned, <br />
to the necessary degreee; we make no attempt to cover the full language.<br />
This is NOT a Haskell course! Haskell allows us to speak about concepts<br />
of computer science WITHOUT a lot of language learning. And Haskell<br />
even helps to keep out detrimental habits from previous programming<br />
experience, as well as motivational problems resulting from the widely<br />
differing previous experiences of our incoming students.<br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:hj@sm.luth.se Håkan Jonsson] Luleå University of Technology, Sweden<br><br />
<b>Course:</b> SMD001, functional programming<br><br />
<b>Student background:</b> <br />
None. This is the very first programming course <br />
our students take.<br><br />
<b>Materials:</b> <br />
Materials: Simon Thompson's Haskell book + 7 laboratory/programming <br />
assignments using Hugs.<br />
<br><br />
<b>Web page:</b>http://www.sm.luth.se/csee/courses/smd/001/ (mostly Swedish)<br> <br />
<br />
<br />
<b>Instructor:</b> [mailto:Clem.Baker-Finch@cs.anu.edu.au Clem Baker-Finch, Australian National University<br><br />
<b>Course:</b>Introduction to Programming and Algorithms<br><br />
<b>Student background:</b> No programming background was<br />
assumed.<br />
<br><br />
<b>Materials:</b> GHC, GHCi, Simon Thompson 1st ed., my own materials. <br />
<br><br />
<b>Web page:</b> http://cs.anu.edu.au/Student/comp1100/<br> <br />
<b>Comments:</b><br />
<blockquote><br />
The first 75% of the course is basic programming concepts using Haskell. The remainder covers the same concepts in Java. This is reinforced - hopefully - by the third assignment (in Java) being the same as the first assignment (in Haskell). The aim is to provide a managed transition to the course which follows in second semester. Another point of possible interest is the use of a simple graphics library, ANUPlot, built on top of the OpenGL binding. See http://code.google.com/p/anuplot/<br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:lyndon@cs.uwa.edu.au Lyndon While] The University of Western Australia<br><br />
<b>Course:</b> Foundations of Computer Science<br><br />
<b>Student background:</b> None<br><br />
<b>Materials:</b> hugs 98; Thompson.<br><br />
<b>Web page:</b> http://undergraduate.cs.uwa.edu.au/courses/230.123<br><br />
<br />
<br />
<b>Instructor:</b> [http://www.cs.us.es/~jalonso José A. Alonso Jiménez] Dept of Computer Science and A.I., University of Seville, Spain<br><br />
<b>Course:</b> Informatics (Inform&aacute;tica, in spanish)<br><br />
<b>Student background:</b> None. This is the very first programming course <br />
our students take.<br><br />
<b>Materials:</b> GHCi, Emacs, Graham Hutton: &quot;Programming in Haskell&quot;, Slides, Exercises, Exams <br><br />
<b>Web page:</b> http://www.cs.us.es/~jalonso/cursos/i1m (in spanish)<br><br />
<b>First run:</b> 2009–2010<br><br />
<b>Last run:</b> 2012–2013<br />
<br />
----<br />
<br />
== Haskell as a second language ==<br />
<br />
These courses teach Haskell to students that have already learned<br />
another language.<br />
<br />
<b>Instructor:</b> [mailto:page@ou.edu Rex Page]<br />
University of Oklahoma<br><br />
<b>Course:</b> Discrete Mathematics<br><br />
<b>Student background:</b> High-school mathematics, introductory programming<br />
course (any language)<br><br />
<b>Materials:</b> Lecture notes, Projects, Exams, Solutions, Proof checking<br />
tools, etc.; text: Hall and O'Donnell, &quot;Discrete Mathematics with a<br />
Computer&quot;<br><br />
<br />
<b>Web page:</b> http://www.cs.ou.edu/~beseme/<br><br />
<b>Comments:</b><br />
<blockquote><br />
Lecture notes comprise over 350 animated slides (all both PowerPoint and<br />
PDF<br />
formats). About two-thirds of the material centers around mathematical logic.<br />
After the introduction of predicates, all of the examples in the logic<br />
portion<br />
of the course involve reasoning about properties of software, most of which is<br />
expressed in Haskell (a few are conventional looping functions).<br />
<p>Software examples include sum, sequence concatenation, logical operations on<br />
sequences, the Russian peasant algorithm, insertion and lookup in AVL <br />
trees, and<br />
other computations. Most of the properties verified relate to aspects of <br />
program<br />
correctness, but resource utilization properties are also verified in <br />
some<br />
cases. Several semesters worth of exams (finals and exams given during <br />
the term)<br />
are provided. The slides have matured through several offerings of the course.</p><br />
<p>The remaining third of the course discusses other standard topics<br />
in discrete<br />
mathematics, such as sets, functions, relations, trees, and counting.<br />
The web<br />
page provides access to a preview of the material. Exams and solutions are<br />
protected by a login procedure (to increase the comfort level of<br />
instructors<br />
wishing to use them in courses). The web page provides a link through<br />
which<br />
instructors may gain access to the full website.</p><br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:labra@lsi.uniovi.es Jose Emilio Labra Gayo],<br />
Dept. of Computer Science (EUITIO) University of Oviedo<br><br />
<b>Course:</b> Logic and Functional Programming<br><br />
<b>Student background:</b> The course is oriented towards third year undergraduate students in computer science. Usually, the students have been<br />
introduced to imperative languages like Pascal and Object <br />
Oriented Languages like C++<br><br />
<b>Materials:</b> Hugs; R. Bird "Introd. to FP using Haskell" (2nd Ed), J. E. Labra Gayo. "Introduction to the Haskell Language" (in spanish).<br><br />
<b>Web page:</b> http://lsi.uniovi.es/~labra/plf.html (in spanish).<br />
My FP page: http://lsi.uniovi.es/~labra/FuncProg.html<br><br />
<br />
<br />
<b>Instructor:</b> [mailto:fruehr@willamette.edu Fritz Ruehr]<br />
Willamette University, Salem, Oregon, USA (a small Liberal Arts College, about 1 hour from Portland & OGI)<br><br />
<b>Course:</b> CS 451 Topics in Computer Science: Functional Programming<br><br />
<b>Student background:</b> Data structures (I may also have required discrete math)<br><br />
<b>Materials:</b> Hugs 1.4 beta (I also taught Scheme); Haskell: The Craft of Functional Programming by Simon Thompson (I also used my own on-line lecture notes and labs and Kent Dybvig's text on Scheme)<br><br />
<b>Web page:</b> http://www.willamette.edu/~fruehr/451/<br><br />
<b>Comments:</b><br />
<blockquote><br />
The notes and labs I have on-line are in pretty rough form: many slide <br />
points are just one-line topical stubs I used as reminders in lecture.<br />
Many of the on-line materials are not linked into the (out of date)<br />
home page.<br />
<br />
I hope to have the course approved for next Fall as a regular offering<br />
(i.e., not as a "special topic") and should have more extensive<br />
on-line materials up by then.<br />
<br />
Teaching "bi-lingually" in Haskell and Scheme seemed like a good idea<br />
at the time, but next time around I will use Haskell as the main vehicle,<br />
perhaps taking some time near the end of the course to highlight some<br />
other languages (Scheme, ML, Clean).<br />
<br />
Some of my students used Conal Elliot's Fran and Paul Hudak's Haskore<br />
and liked them a lot; I was nice to have some significantly-sized<br />
applications that seemed more practical and fun to show off at the end<br />
of the course (I should have demonstrated these things at the beginning<br />
of the course to help with motivation). Next time around I would like to<br />
have a "beginner's prelude" or similar available to avoid problems with<br />
classes in type inference, Int vs. Integer, etc. These problems were a<br />
constant annoyance during lectures.<br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:J.Hamer@cs.auckland.ac.nz John Hamer],<br />
University of Auckland<br><br />
<b>Course:</b> Logic and Functional Programming<br><br />
<b>Student background:</b> Year 2 programming + some discrete maths<br><br />
<b>Materials:</b> Hugs 98, Haskell School of Expression, Page "Two Dozen Short Lessons in Haskell",<br><br />
<b>Web page:</b> http://www.cs.auckland.ac.nz/compsci360fc<br><br />
<br />
<br />
<b>Instructor:</b> [mailto:lengauer@fmi.uni-passau.de Chris Lengauer]<br />
University of Passau<br><br />
<b>Course:</b> Functional Programming<br><br />
<b>Student background:</b> two years of CS study<br><br />
<b>Materials:</b> hugs; Richard Bird's new text (PHI)<br><br />
<b>Web page:</b> not reachable from outside Passau<br><br />
<br />
<br />
<b>Instructor:</b> [mailto:cunningham@cs.olemiss.edu Conrad Cunningham]<br />
University of Mississippi<br><br />
<b>Course:</b> Functional Programming<br><br />
<b>Student background:</b> official -- senior or graduate standing; actual -- introductory programming, data structures, and discrete math<br><br />
<b>Materials:</b> Hugs on Unix and MS Windows systems;<br />
Mostly use the instructor's own set of lecture notes. Also Simon Thompson's HASKELL: THE CRAFT OF FUNCTIONAL PROGRAMMING. Previously used the Bird and Wadler textbook<br><br />
<b>Web page:</b> http://www.cs.olemiss.edu/~hcc/csci555/<br><br />
<b>Comments:</b><br />
<blockquote><br />
Although I am not a researcher in FP, I enjoy teaching the FP course.<br />
Most of the students take to the course after a few weeks. Hugs works<br />
reasonably well, but, of course, more pedagogically oriented error messages<br />
and other support tools would be helpful.<br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:leavens@cs.iastate.edu Gary T. Leavens],<br />
Iowa State University<br><br />
<b>Course:</b> Programming Languages 1<br><br />
<b>Student background:</b> undergraduate course in compilers or programming languaages<br><br />
<b>Materials:</b> Hugs 1.4; Thompson's Haskell: The Craft of Programming<br><br />
<b>Web page:</b> http://www.cs.iastate.edu/~leavens/ComS541.html<br><br />
<b>Comments:</b><br />
<blockquote><br />
Be sure to tell your students how to debug programs.<br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:jtod@dcs.gla.ac.uk John O'Donnell]<br />
University of Glasgow<br><br />
<b>Course:</b> Functional Programming<br><br />
<b>Student background:</b> Programming (in Ada), Algorithmic Foundations<br><br />
<b>Materials:</b> Hugs; Simon Thompson's book on Haskell<br><br />
<b>Web page:</b> http://www.dcs.gla.ac.uk/courses/teaching/level2/modules/#FP2<br><br />
<br />
<b>Instructor:</b> [mailto:chitil@informatik.rwth-aachen.de Olaf Chitil],<br />
RWTH Aachen, Germany<br><br />
<b>Course:</b> Functional Programming in Haskell<br><br />
<b>Student background:</b> basic programming skills (not necessarily in a<br />
functional language)<br><br />
<b>Materials:</b> Hugs 1.4; Hugs user manual, slide copies;<br />
additionally the `Gentle Introduction to Haskell', probably Bird's `Introduction<br />
to Functional Programming using Haskell' in the future.<br><br />
<b>Web page:</b> http://www-i2.informatik.rwth-aachen.de/Praktikum/SWP/ (in German)<br><br />
<b>Comments:</b><br />
<blockquote><br />
The course starts with 4 full time days of learning Haskell. During the semester<br />
the students (in groups of 2 students) have to implement a compiler and an<br />
abstract machine for a simple imperative language. They are given parts of the<br />
system and a manual on how to do the remaining parts (they have no prior<br />
knowledge on compiler construction).<br />
The most difficult construct for students to understand is the monad. I<br />
introduce IO without mentioning monads. Later I explain how to build a simple<br />
exception handling system based on the type `Maybe a' / `Error a'. Only<br />
subsequently I give the general definition of monads and present the list monad<br />
and a simple state monad. However, I fear that just to understand the bind<br />
operator `>>=' requires people to be quite comfortable with higher-order<br />
functions.<br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [http://web.comlab.ox.ac.uk/oucl/people/richard.bird.html Richard Bird], Oxford Brookes University<br><br />
<b>Course:</b> Functional Programming<br><br />
<b>Student background:</b> Elementary structured programming<br><br />
<b>Web page:</b> http://web.comlab.ox.ac.uk/oucl/courses/topics00-01/fp/<br><br />
<br />
<br />
<b>Instructor:</b> [mailto:paul.hudak@yale.edu Paul Hudak],<br />
Yale University, Dept of Computer Science<br><br />
<b>Course:</b> Functional Programming<br><br />
<b>Student background:</b> at least one programming course<br><br />
<b>Materials:</b> Hugs; my own textbook, which is under preparation<br><br />
<b>Web page:</b> none<br><br />
<br />
<br />
<b>Instructor:</b> [mailto:abf@cs.ucc.ie Alex Ferguson]<br />
University College Cork<br><br />
<b>Course:</b> Functional and Logic Programming<br><br />
<b>Student background:</b> Final year undergraduate<br />
<br><br />
<b>Materials:</b> Final year undergraduate<br />
Materials: Hugs 98; ghc; Simon Thompson, "Haskell: The Craft of<br />
Functional Programming" (2nd ed.)<br />
<br><br />
<b>Web page:</b> http://yeats.ucc.ie/~abf/CS4001/<br> <br />
<b>Comments:</b><br />
<blockquote><br />
This is the declarative programming option for 4th year<br />
undergrads, who have Java as a first programming language, and some<br />
knowledge of C and C++. The current final year have had some exposure<br />
to Haskell in first year, though this is no longer the case for our<br />
current intake.<br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:lky@nada.kth.se Leif Kusoffsky],<br />
Royal Institute of Technology, Stockholm<br><br />
<b>Course:</b> Functional Programming 2D1370<br><br />
<b>Student background:</b> The course is oriented towards third year<br />
undergraduate students in computer science. The students<br />
have been introduced to imperative languages like<br />
C and Object Oriented Languages like Java<br />
<br><br />
<b>Materials:</b> Hugs; Hudak : The Haskell School of Expression<br />
<br><br />
<br />
<br />
<b>Instructor:</b> Jeremy Bobbio -- INSIA<br><br />
<b>Course:</b> Functional and Logic Programming<br><br />
<b>Student background:</b> One year CS<br />
<br><br />
<b>Materials:</b> <br />
Hugs, GHC, Paul Hudak's Haskell School of Education<br />
<br><br />
<b>Web page:</b> http://etudiants.insia.org/~jbobbio/pafp/ (french)<br> <br />
<br />
<br />
<b>Instructor:</b> [mailto:antkaij@mit.jyu.fi Antti-Juhani Kaijanaho]<br />
University of Jyväskylä<br><br />
<b>Course:</b> Functional Programming 1 & 2<br><br />
<b>Student background:</b> third-year undergraduate and up<br />
<br><br />
<b>Materials:</b><br />
GHC, Gtk2HS<br />
<br><br />
<b>Web page:</b> [http://www.mit.jyu.fi/antkaij/opetus/fo/2005-2006/index.en.html]<br />
<br><br />
<b>Last run:</b> 2005&ndash;2006<br />
<br><br />
<!--<b>Comments:</b><br />
<blockquote><br />
(I'll write this later)<br />
</blockquote>--><br />
<br />
<b>Instructor:</b> [mailto:djd@comp.leeds.ac.uk David Duke]<br />
University of Leeds, School of Computing<br><br />
<b>Course:</b> Functional Programming<br><br />
<b>Student background:</b> Second and third year undergraduate<br />
<br><br />
<b>Materials:</b> ghc; Graham Hutton "Programming in Haskell"<br />
<br><br />
<b>Web page:</b> www.comp.leeds.ac.uk/se23/<br> <br />
<b>Comments:</b><br />
<blockquote><br />
This is an optional course that students currently can take in <br />
second or third year (from 2008/9 it will be third-years only).<br />
Students will have previously used Python and Java.<br />
Although the emphasis is on learning to solve problems within<br />
the functional paradigm, and how to develop solutions within<br />
Haskell, I also like to show students what is "under the<br />
bonnet" and conclude the module with an introduction to<br />
implementation issues, using material derived from<br />
"Implementing Functional Languages" by Simon Peyton Jones and <br />
David Lester. <br />
</blockquote><br />
<br />
<b>Instructor:</b> [mailto:popavdan@yahoo.com Popa V. Dan]<br />
University of Bacau, Romania <br><br />
<b>Course:</b> "Limbaje formale si automate" (Formal languages and automata) <br><br />
<b>Student background:</b> second-year undergraduate <br />
<br><br />
<b>Materials:</b> Hugs 98 (2002 revised version) included in Mandriva (Formely Mandrake) 10.0 Linux Distribution<br />
<br><br />
<b>Web page:</b> Not yet. Try the page of the "ro" community on www.haskell.org<br />
<br> [http://www.haskell.org/haskellwiki/Ro/Haskell Ro/Haskell webpage is here] <br><br />
<b>First run:</b> 2006&ndash;2007<br />
<br><br />
<br />
Haskell is used as an implementation languages in student's laboratories.<br />
The ideea was to provide a language powerfull enough to be able to express <br />
how to build a parser starting from a grammmar. The students are able<br />
to build small (monadic) interpreters for "while-languages" using a <br />
recommanded monad and a recommanded back-end. The labs are focusing on the <br />
grammar of the languages, on the modular (monadic) parsing as a tool for <br />
verifying and processing inputs which are not validable by finite state <br />
automata but by context free grammmars. Adaptability of the language, <br />
especially obtained manipulating and improving syntax is also a target.<br />
<br />
Support (concerning Haskell): "O introducere in Haskell prin exemple" by<br />
Dan Popa, published in january 31,2007 by <br />
[http://www.edusoft.ro Edusoft](in romanian) Contact the author if needed .<br />
<br />
Other recommanded books: "Gentle Introd to Haskell 98" and YAHT <br />
Recomanded papers: All about monadic parsing. <br />
Special message for Graham Hutton, Erik Meijer and P. Wadler and all <br />
other authors with similar interests from the Haskell <br />
community:<br />
<br />
Thank you very much for your papers concerning Monadic parsing and <br />
interpreters ! <br />
<br />
<b>Course:</b> Programming Paradigms <br><br />
<br />
<br />
----<br />
<br />
== Comparative programming languages ==<br />
<br />
These courses teach general programming language principles, with<br />
Haskell as an example of a functional language.<br />
<br />
<b>Instructor: </b> Ruediger Marcus Flaig, University of Heidelberg (Germany)<br />
<br><br />
<b>Course:</b> An introduction to programming in bioinformatics <br><br />
<b>Student background:</b> different, but generally low<br><br />
<b>Materials:</b> Hugs-98 and lots of other stuff<br />
<br><br />
<b>Web page:</b> http://www.sanctacaris.net/rc.html<br> <br />
<b>Comments:</b><br />
<blockquote><br />
This course is designed to introduce life science students,<br />
that is to say, going-to-be biologists, physicians, biotechnologists<br />
and maybe others, to solving real-life problems (such as DNA sequence<br />
handling and analysis). Emphasis will be on paradigms (imperative /<br />
OO, functional, declarative). Although -- in order not to frighten<br />
people -- the official announcement mentions only Python, Haskell will<br />
be presented as THE purely functional language, and all solutions may<br />
be presented in either Python, Haskell or Java. I am very curious<br />
about the feedback I'll get, and maybe next term we shall focus more<br />
on Haskell. What I'd really need, though, is some life science related<br />
package for Haskell, such as BIOPYTHON and BIORUBY. <br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:ham@cs.utexas.edu Hamilton Richards],<br />
University of Texas (Austin)<br><br />
<b>Course:</b> Programming Languages (taught in 2005)<br><br />
<b>Student background:</b> <br><br />
<b>Materials:</b> Hugs 1.4; Sethi, Davie.<br><br />
<b>Web page:</b> http://www.cs.utexas.edu/users/ham/UTCS/CS345/<br><br />
<b>Comments:</b><br />
<blockquote><br />
I'm using Haskell in a programming-languages course, but it's distributed<br />
somewhat piecemeal through the course. Probably adds up to something like<br />
3-4 weeks (out of 15).<br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [http://www.cs.waikato.ac.nz/~marku Mark Utting]<br />
University of Waikato (New Zealand)<br />
<b>Course:</b> Programming Languages<br><br />
<b>Student background:</b> Two years of C++ and 1 year of Haskell<br><br />
<b>Materials:</b> Textbook "Programming Languages", Louden.<br />
<b>Web page:</b> http://www.cs.waikato.ac.nz/~marku/313<br><br />
<b>Comments:</b><br />
<blockquote><br />
The course covers at least two languages in each of the<br />
main paradigms (object-oriented, functional and logic programming),<br />
plus history, semantics and implementation issues.<br />
The Haskell section is about 2 weeks long and usually focusses on <br />
programming with higher-order functions and how that enables the<br />
language to be extended in application-specific ways<br />
(parser combinators, html-generation combinators etc.)<br />
</blockquote><br />
<br />
<b>Instructor:</b> [mailto:zeeshan@apiit.edu.pk M Zeeshan Ali Ansari],<br />
Asia Pacific Institute of Information Technology (Pakistan)<br><br />
<b>Course:</b> Advanced Programming Language Concepts<br><br />
<b>Student background:</b> Students having studied and worked on Imperative Programming Languages <br><br />
<b>Materials:</b> The Craft of Haskell, A Gentle Introduction to Haskell, Yet Another Haskell Tutorial.<br><br />
<b>Web page:</b> http://www.apiit.edu.pk<br><br />
<b>Comments:</b><br />
<blockquote><br />
This course compares and contrasts various programming language paradigms including Functional Programming. Out of 13 week course 5 to 6 of them are dedicated towards Haskell. The material is basically written in a way that enables imperative language programmers to understand the concepts and power of functional programming <br />
<br />
http://www.haskell.org/sitewiki/images/3/3d/Functional_Programming_Tutorial_By_Zeeshan_Ali_Ansari.doc<br />
<br />
<br />
</blockquote><br />
<br />
<b>Instructor:</b> John C. Mitchell,<br />
Stanford University<br><br />
<b>Course:</b> Programming Languages<br><br />
<b>Student background:</b> Some experience with Lisp/C/object-oriented languages.<br><br />
<b>Materials:</b> Concepts in Programming Languages (new Haskell chapters written with Kathleen Fisher)<br><br />
<b>Web page:</b> http://cs242.stanford.edu<br><br />
<b>Comments:</b><br />
<blockquote><br />
Central concepts in modern programming languages, impact on software development, language design trade-offs, and implementation considerations. Functional, imperative, and object-oriented paradigms. Formal semantic methods and program analysis. Modern type systems, higher order functions and closures, exceptions and continuations. Modularity, object-oriented languages, and concurrency. Runtime support for language features, interoperability, and security issues. <br />
</blockquote><br />
<br />
----<br />
<br />
== Advanced functional programming using Haskell ==<br />
<br />
These courses deal with the advanced issues such as semantics, type<br />
systems, or compilers. Includes a other advanced courses taught using<br />
Haskell. <br />
<br />
<b>Instructor:</b> [mailto:gmh@cs.nott.ac.uk Graham Hutton]<br />
School of Computer Science, University of Nottingham<br><br />
<b>Course:</b> Advanced Functional Programming<br><br />
<b>Student background:</b> At least one year of CS, including a course in Haskell<br><br />
<b>Materials:</b> Hugs; GHC; Graham Hutton, Programming in Haskell; own course material<br><br />
<b>Web page:</b> http://www.cs.nott.ac.uk/~gmh/afp.html<br />
<br />
<b>Instructor:</b> [mailto:rjmh@cs.chalmers.se John Hughes]<br />
Chalmers University, Gothenburg<br><br />
<b>Course:</b> Advanced Functional Programming<br><br />
<b>Student background:</b> General CS maturity; from this year most students have already used Haskell in introductory courses.<br><br />
<b>Materials:</b> Mainly hbc.; Papers (see web page)<br><br />
<b>Web page:</b> http://www.cs.chalmers.se/~rjmh/AFP<br><br />
<b>Comments:</b><br />
<blockquote><br />
The goal is to teach students how to solve substantial problems in a<br />
functional language --- `functional programming in anger', one might say. The<br />
emphasis is on design and use of suitable combinator libraries to simplify<br />
applications. Material covered includes monad design, use of CPS style,<br />
libraries for parsing, pretty-printing, and GUIs (presently fudgets). <br />
<br />
The course is taught in a `problem based' manner: lectures are few, while<br />
students solve three substantial programming problems during the term, with<br />
plenty of backup via group meetings. I adopted this teaching form three years<br />
ago, and it has led students to develop far better practical skills than most<br />
obtained from my earlier `lectures and exercises' courses, and I believe to<br />
use Haskell much more after the course's end.<br />
<br />
This course is optional in the third or fourth year, and is taken by a<br />
small-to-medium sized group of students.<br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:Olof.Johanssson@cs.umu.se Olof Johansson], Umeå Univesity, Department of Computing Science<br><br />
<b>Course:</b> Programming language semantics<br><br />
<b>Student background:</b> two terms of computer science studies and specificaly a course Programming language concepts<br><br />
<b>Materials:</b> Hugs and some HBC and GHC; Watt, Programming language, Syntax and Semantics<br><br />
<b>Web page:</b> http://www.cs.umu.se/local/kurser/TDBC05 (Only in swedish)<br> <br />
<br />
<br />
<b>Instructor:</b> [mailto:lyndon@cs.uwa.edu.au Lyndon While]<br />
The University of Western Australia<br><br />
<b>Course:</b> Functional Programming<br><br />
<b>Student background:</b> OOP, plus most of them have used Haskell previously<br><br />
<b>Materials:</b> hugs 98; none of the recent books really fit<br><br />
<b>Web page:</b> http://undergraduate.cs.uwa.edu.au/courses/230.301<br><br />
<b>Instructor:</b> [mailto:F.A.Rabhi@dcs.hull.ac.uk Fethi Rabhi],<br />
University of Hull (UK)<br><br />
<b>Course:</b> AI Problem Solving Techniques (using Haskell and Prolog)<br><br />
<b>Student background:</b> Haskell and Prolog programming<br><br />
<b>Materials:</b> HUGS; Thompson'96, own notes (soon to be published as a book).<br><br />
<b>Web page:</b> none<br><br />
<b>Comments:</b><br />
<blockquote><br />
It is very hard to justify learning Haskell unless it can be<br />
demonstrated in very practical situations (hence the provision<br />
of the above course).<br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:karczma@info.unicaen.fr Jerzy Karczmarczuk]<br />
University of Caen, Caen (France)<br> No links in the fr-Haskell page. Why not ?<br />
<b>Course:</b> Compilation<br><br />
<b>Student background:</b> General CS knowledge; students (should...) know Scheme and imperative languages, also some theory of languages and automata.<br><br />
<b>Materials:</b> <br />
Hugs, GHC, now also GHCi, and their documentation. Handouts: (still a little incomplete)<br />
Impossible to find the foolowing matterials.Files can not be found. <br />
* http://users.info.unicaen.fr/~karczma/matrs/Maitcomp/compilation_a.pdf<br />
* http://users.info.unicaen.fr/~karczma/matrs/Maitcomp/compilation_b.pdf<br />
* http://users.info.unicaen.fr/~karczma/matrs/Maitcomp/compilation_c.pdf<br />
<b>Comments:</b><br />
<blockquote><br />
This is a compulsory semestrial course in fourth year. Weekly: 1.5h<br />
course, 2.5H practice.<br />
One, but comprehensive assignment, taking 2 months or more.<br />
askell is our main coding tool. A little time is devoted by necessity<br />
to the language<br />
itself, but also from the perspective: "how would you compile such a<br />
language".<br />
"Standard stuff", such as parsing combinators, etc.is covered, but we<br />
don't begin with that.<br />
We start with the construction of small interpreters: from recursive<br />
Lisp-style to postfix,<br />
(Forth/PostScript style) constructing this last by partial evaluation<br />
(intuitively).<br />
We introduce control structures as lazy functions, operation<br />
sequencing through continuations,<br />
monads not only for parsing, but also for exceptions and<br />
non-determinism.<br />
We discuss (simply) the type inference. The code generator assembles a<br />
linear code by lazy<br />
concatenation of chunks which makes it trivial to deal with loops and<br />
cross-referencing<br />
fragments. Algorithms of garbage collection are presented (not<br />
implemented, though...) in<br />
a purely functional style.<br />
<br />
Students' opinion: "Frightening at first. Learning curve steep, but<br />
much less time spent on debugging, coding proficiency comes fast. Good for<br />
understanding what the compilation is about, but difficult to make a<br />
complete running program with all the I/O, etc.<br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:jeffm@cse.uconn.edu Jeffrey A. Meunier], University of Connecticut<br><br />
<b>Course:</b> CSE240 Intermediate Computer Systems<br><br />
<b>Student background:</b> computer/microprocessor organization<br />
<br><br />
<b>Materials:</b> Hugs (Feb 2001); Bird ``Introduction to Functional<br />
Programming''; Furber ``ARM System-on-Chip Architecture''<br />
<br><br />
<b>Web page:</b> http://www.engr.uconn.edu/~jeffm/Classes/CSE240-Spring-2001/index.html<br> <br />
<b>Comments:</b><br />
<blockquote><br />
This is a course in the low level programming of microprocessor systems.<br />
The course will focus on the development of an emulator (virtual<br />
machine, or VM) for a small computer system based on a modern RISC<br />
microprocessor (the ARM CPU) using a high level programming language<br />
(Haskell), and assembly language programming of the VM. Development of<br />
the VM will occur in stages, starting with the simple direct-execution<br />
(stream-based) model, gradually moving to a more realistic memory-mapped<br />
model, including exception handlers, concurrent processes, and<br />
asynchronous external devices.<br />
</blockquote><br />
<br />
<b>Instructor:</b> Gabriele Keller<br />
The University of New South Wales<br><br />
<b>Course:</b> Concepts of Programming Languages<br><br />
<b>Student background:</b> Most of them have used Haskell in first year<br><br />
<b>Materials:</b> GHC, TaPL and `Programming Languages: Theory and Practice', papers<br><br />
<b>Web page:</b> http://www.cse.unsw.edu.au/~cs3161<br><br />
<b>Last run:</b> 2006<br><br />
<b>Comments:</b><br />
<blockquote><br />
Expose students to a theory of programming languages based on type<br />
theory and operational semantics as a mathematically sound framework<br />
which allows us to investigate the properties of a large number of<br />
programming language features, including:<br />
<br />
* on semantics of different programming languages and programming paradigms: imperative, object oriented, and declarative.<br />
* theoretical foundations of programming languages: syntax, operatational, axiomatic and denotational semantics.<br />
* implementation aspects of central language features, such as dynamic and strong typing, polymorphism, overloading and automatic memory management<br />
<br />
Assignments are in GHC/Haskell, and in the past have included implementing a<br />
mini-Haskell type checker, type inference and interpreter.<br />
</blockquote><br />
<br />
<b>Instructor:</b> Manuel Chakravarty<br />
The University of New South Wales<br><br />
<b>Course:</b> Advanced Functional Programming<br><br />
<b>Student background:</b> Most of them have used Haskell in first year<br><br />
<b>Materials:</b> GHC, papers (see the website)<br><br />
<b>Web page:</b> http://www.cse.unsw.edu.au/~cs4132<br><br />
<b>Last run:</b>2004<br><br />
<b>Comments:</b><br />
<blockquote><br />
To provide students with an understanding of the theory and practice of<br />
the design, use, and implementation of functional programming languages,<br />
such as Haskell<br />
<br />
This includes selected topics from the following areas:<br />
<br />
* Foundations: lambda calculus, semantics, and type systems.<br />
* Design: side-effects, exceptions, concurrency, and parallelism.<br />
* Implementation: abstract machines, program transformation, and memory management. <br />
* Programming techniques: combinator libraries, monads, generic programming, and meta programming.<br />
* Applications: domain specific languages, graphics, web programming, reactive systems, and scientific programming.<br />
</blockquote><br />
<br />
[[Category:Community]]</div>Aivanhttps://wiki.haskell.org/index.php?title=Haskell_in_education&diff=55912Haskell in education2013-05-13T14:20:49Z<p>Aivan: /* Haskell as a second language */</p>
<hr />
<div>[[Category:Education]]<br />
This is a collection of material of interest to those teaching or<br />
taking courses that use Haskell. There is also a more general site,<br />
http://www.cs.kun.nl/fple/, devoted to all functional languages. The proceedings of the latest<br />
[http://www.informatik.uni-kiel.de/~mh/publications/reports/fdpe02/ International Workshop on Functional and Declarative Programming in Education (FDPE)] are now available.<br />
Some of the lecture notes and<br />
other course material found in these web pages are excellent<br />
supplements to the available text books.<br />
If you would like to use lecture<br />
notes, assignments, or other material found in these course web pages<br />
please contact the author for permission.<br />
<br />
Most of the entries are years old. When you add your own new<br />
material to this page, please also say when the course was run for the last time.<br />
<br />
The results of a survey of university courses using Haskell in the academic year 2005-2006 can be found [http://www.cs.chalmers.se/~rjmh/Wash/Survey/teaching.htm here]. Also, some news were added during the 2006-2007 academic year.<br />
<br />
== Suitable Course Textbooks ==<br />
<br />
See [[Books#Textbooks]].<br />
<br />
== Haskell as a first language ==<br />
<br />
These courses teach Haskell to students with no background in programming.<br />
<br />
<b>Instructor:</b> [http://homepages.inf.ed.ac.uk/wadler/ Philip Wadler] University of Edinburgh<br><br />
<b>Course:</b> [[Informatics 1 - Functional Programming]]<br><br />
<b>Materials:</b> GHCi, Emacs, Thompson: Haskell, the Craft of Functional Programming<br><br />
<b>Web page:</b> http://www.inf.ed.ac.uk/teaching/courses/inf1/fp/ <br><br />
<br />
<br />
<b>Instructor:</b> [mailto:page@ou.edu Rex Page] <br />
University of<br />
Oklahoma<br><br />
<b>Course:</b> Introduction to Computer Programming<br><br />
<b>Student background:</b> High-school mathematics<br><br />
<b>Materials:</b> Projects, Exams, Downloadable textbook: Rex Page, <br />
&quot;Two<br />
Dozen Short Lessons in Haskell&quot;<br><br />
<b>Web page:</b> http://www.cs.ou.edu/~rlpage/fpclassSpring97/<br />
<br />
<b>Comments:</b><br />
<blockquote><br />
These materials arose from a course offered for three consecutive<br />
semesters as<br />
an alternative to our usual first course in programming. Most of the<br />
students<br />
who took the course graduated in the past two years, and many of them<br />
cited it<br />
in the exit interview with the department chair as the most influential<br />
course<br />
in the entire academic career.<br />
<p>All materials for two offerings of the course are available through<br />
the web<br />
page. This includes individual projects, team projects, project<br />
solutions,<br />
exams, supplied software (connected with certain projects), tips for<br />
students<br />
taking the course, FAQs addressing questions that students asked during<br />
the<br />
semester, and a short textbook which served as the primary text in the<br />
course.</p><br />
<p>The first 10 to 11 weeks of the course use Haskell. Students are<br />
required to<br />
write nine programs in Haskell, three of which are team projects that<br />
combine<br />
software developed in individual projects. Different members of a team<br />
are<br />
assigned different individual projects, and the team efforts combine<br />
their<br />
solutions into a working piece of software.</p><br />
<p>In the early part of the course, students use operators like map,<br />
foldr, zip,<br />
and iterate to express computations. Explicit recursion is introduced<br />
after some<br />
experience with these common patterns of computation. Examples and<br />
problems<br />
address non-numeric applications, for the most part. Both interactive<br />
and file<br />
I/O are covered, but general purpose monads are not.</p><br />
<p>The last 5 to 6 weeks of the course use C, and most of the projects<br />
in that<br />
part of the course duplicate the function of earlier pieces of software<br />
that the<br />
students have written in Haskell.</p><br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:Jonathan.Hill@comlab.ox.ac.uk Jonathan Hill]<br />
Oxford University Computing Laboratory<br><br />
<b>Course:</b> Functional Programming for the Integrated Graduate Development Programme in Software Engineering at Oxford University.<br><br />
<b>Student background:</b> Discrete mathematics (the course is a part time MSc for people from industry; most are from IBM or Nortel).<br><br />
<b>Materials:</b> Gofer (an old version, with a stripped down prelude---no parameter classes!); Own course material<br><br />
<b>Web page:</b> http://www.comlab.ox.ac.uk/igdp/text/course06.html<br />
Note: Web pages not accessible. May be ... moved ? <br />
<br />
<br />
<b>Instructor:</b> [mailto:nxg@cs.nott.ac.uk Neil Ghani]<br />
School of Computer Science, University of Nottingham<br><br />
<b>Course:</b> Functional Programming<br><br />
<b>Student background:</b> None<br><br />
<b>Materials:</b> Hugs; Graham Hutton, Programming in Haskell; own lecture slides<br><br />
<b>Web page:</b> http://www.cs.nott.ac.uk/~nxg/G51FUN06/fun.html<br />
<br />
<b>Instructor:</b> [mailto:prins@cs.unc.edu" Jan Prins]<br />
UNC Chapel Hill<br><br />
<b>Course:</b> Introduction to Functional Programming<br><br />
<b>Student background:</b> solid background in high-school science and mathematics<br><br />
<b>Materials:</b> Hugs 1.4 incl. Active Haskell, FRAN and [[Haskore]]; Simon Thompson, "Haskell: The Art of Functional Programming"<br><br />
<b>Web page:</b> http://www.cs.unc.edu/~prins/Classes/15/<br><br />
<b>Comments:</b><br />
<blockquote><br />
(Introductory programming course for CS and math/science majors, typically Freshman and Sophomores. Class size ~60)<br />
<br />
Our undergraduate computing environment is now largely<br />
PCs running Windows NT. We use NTEmacs as the programming<br />
environment with a slightly modified version of Emacs hugs<br />
mode with hugs running as a subprocess. The combined<br />
hugs/NTEmacs/Active Haskell distribution (available through<br />
course home page) is installed on 400+ public Win NT machines<br />
on campus and some unknown number of student-owned Win 95/98<br />
machines.<br />
<br />
This arrangement is new this semester, but so far has been<br />
working well. Keystroke-oriented interactive applications<br />
may be problematic with hugs running in NTEmacs shell mode.<br />
<br />
I'm planning assignments using Fran and Active Haskell and<br />
will try teaching the "brief introduction to imperative<br />
programming" at the end of the class using monads. I would<br />
be interested in talking with anyone who has experience or<br />
suggestions along these lines.<br />
<br />
I took a cue from Paul Hudak and others and have occasional<br />
appearances of MS Agents during lectures to wake students up!<br />
<br />
This is my first time teaching this course, and I would<br />
enjoy talking to others teaching at a similar level. A<br />
cursory search on the web didn't reveal many courses<br />
in this category.<br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:dave@cs.chalmers.se David Sands]<br />
University of Gothenburg & Chalmers University of Technology<br><br />
<b>Course:</b> Programmering för Naturvetare<br><br />
<b>Student background:</b> New students<br><br />
<b>Materials:</b> hugs 1.4; Simon Thompson<br><br />
<b>Web page:</b> http://www.md.chalmers.se/Cs/Grundutb/Kurser/nptah/<br><br />
<b>Comments:</b><br />
<blockquote><br />
This is the first part of a first course in programming. About 16<br />
lectures, each 2x45 mins plus weekly exercise classes and three<br />
assessed programming exercises. Most of my materials are in English.<br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:M.A.Rodrigues@dcs.hull.ac.uk Marcos A Rodrigues]<br />
The University of Hull, Hull, UK<br><br />
<b>Course:</b> Functional and Logic Programming<br><br />
<b>Student background:</b> none<br><br />
<b>Materials:</b> hugs 1.4; Haskell: the Craft of Functional Programming. Thompson S., Addison Wesley, 1996.<br><br />
<br />
<b>Instructor:</b> [mailto:Torsten.Grust@uni-konstanz.de Torsten Grust]<br />
University of Konstanz (Germany)<br> <br />
<b>Course:</b> Deklarative Programmierung (Declarative Programming, in german)<br><br />
<b>Student background:</b> basic math, no programming background required<br><br />
<b>Materials:</b> Hugs 1.4; (~300) slides available from the course web page;<br />
Jeroen Fokker's classroom text: Functional Programming<br />
http://www.cs.uu.nl/~jeroen/courses/fp-eng.ps.gz</a>;<br />
Richard Bird, Phil Wadler: Introduction to Functional Programming; Simon Peyton-Jones: Implementation of Functional Programming Languages<br><br />
<b>Web page:</b> http://www.fmi.uni-konstanz.de/dbis/Courses-old/Courses-ss98/decl-ss98.html<br><br />
<b>Comments:</b><br />
<blockquote><br />
The course is in German only (sorry about that). It additionally<br />
features an introduction to logical programming and Prolog.<br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:richardb@cse.unsw.edu.au Richard Buckland]<br />
University of New South Wales<br><br />
<b>Course:</b> Computing 1A<br><br />
<b>Student background:</b> Mixed, some have no computing<br />
background. This is our cs1 subject.<br><br />
<b>Materials:</b> Hugs 1.4; Simon Thompson<br><br />
<b>Web page:</b> http://www.cse.unsw.edu.au/~cs1011<br><br />
<br />
<br />
<b>Instructor:</b> [mailto:robert@techfak.uni-bielefeld Robert Giegerich], Stefan Posch, University Bielefeld, Germany<br><br />
<b>Course:</b> Introduction to Computer Science<br><br />
<b>Student background:</b> Completed High School (Abitur)<br><br />
<b>Materials:</b> Hugs; Class Notes by Robert Giegerich and Ralf Hinze<br><br />
<b>Comments:</b><br />
<blockquote><br />
Our first semester course<br />
uses Haskell as a vehicle to fundamental aspects of computation:<br />
algorithmics, specification and verification, efficiency analysis,<br />
programming methods. This works wonderfully. We do not require previous<br />
or additional programming experience. Haskell is quickly learned, <br />
to the necessary degreee; we make no attempt to cover the full language.<br />
This is NOT a Haskell course! Haskell allows us to speak about concepts<br />
of computer science WITHOUT a lot of language learning. And Haskell<br />
even helps to keep out detrimental habits from previous programming<br />
experience, as well as motivational problems resulting from the widely<br />
differing previous experiences of our incoming students.<br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:hj@sm.luth.se Håkan Jonsson] Luleå University of Technology, Sweden<br><br />
<b>Course:</b> SMD001, functional programming<br><br />
<b>Student background:</b> <br />
None. This is the very first programming course <br />
our students take.<br><br />
<b>Materials:</b> <br />
Materials: Simon Thompson's Haskell book + 7 laboratory/programming <br />
assignments using Hugs.<br />
<br><br />
<b>Web page:</b>http://www.sm.luth.se/csee/courses/smd/001/ (mostly Swedish)<br> <br />
<br />
<br />
<b>Instructor:</b> [mailto:Clem.Baker-Finch@cs.anu.edu.au Clem Baker-Finch, Australian National University<br><br />
<b>Course:</b>Introduction to Programming and Algorithms<br><br />
<b>Student background:</b> No programming background was<br />
assumed.<br />
<br><br />
<b>Materials:</b> GHC, GHCi, Simon Thompson 1st ed., my own materials. <br />
<br><br />
<b>Web page:</b> http://cs.anu.edu.au/Student/comp1100/<br> <br />
<b>Comments:</b><br />
<blockquote><br />
The first 75% of the course is basic programming concepts using Haskell. The remainder covers the same concepts in Java. This is reinforced - hopefully - by the third assignment (in Java) being the same as the first assignment (in Haskell). The aim is to provide a managed transition to the course which follows in second semester. Another point of possible interest is the use of a simple graphics library, ANUPlot, built on top of the OpenGL binding. See http://code.google.com/p/anuplot/<br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:lyndon@cs.uwa.edu.au Lyndon While] The University of Western Australia<br><br />
<b>Course:</b> Foundations of Computer Science<br><br />
<b>Student background:</b> None<br><br />
<b>Materials:</b> hugs 98; Thompson.<br><br />
<b>Web page:</b> http://undergraduate.cs.uwa.edu.au/courses/230.123<br><br />
<br />
<br />
<b>Instructor:</b> [http://www.cs.us.es/~jalonso José A. Alonso Jiménez] Dept of Computer Science and A.I., University of Seville, Spain<br><br />
<b>Course:</b> Informatics (Inform&aacute;tica, in spanish)<br><br />
<b>Student background:</b> None. This is the very first programming course <br />
our students take.<br><br />
<b>Materials:</b> GHCi, Emacs, Graham Hutton: &quot;Programming in Haskell&quot;, Slides, Exercises, Exams <br><br />
<b>Web page:</b> http://www.cs.us.es/~jalonso/cursos/i1m (in spanish)<br><br />
<b>First run:</b> 2009–2010<br><br />
<b>Last run:</b> 2012–2013<br />
<br />
----<br />
<br />
== Haskell as a second language ==<br />
<br />
These courses teach Haskell to students that have already learned<br />
another language.<br />
<br />
<b>Instructor:</b> [mailto:page@ou.edu Rex Page]<br />
University of Oklahoma<br><br />
<b>Course:</b> Discrete Mathematics<br><br />
<b>Student background:</b> High-school mathematics, introductory programming<br />
course (any language)<br><br />
<b>Materials:</b> Lecture notes, Projects, Exams, Solutions, Proof checking<br />
tools, etc.; text: Hall and O'Donnell, &quot;Discrete Mathematics with a<br />
Computer&quot;<br><br />
<br />
<b>Web page:</b> http://www.cs.ou.edu/~beseme/<br><br />
<b>Comments:</b><br />
<blockquote><br />
Lecture notes comprise over 350 animated slides (all both PowerPoint and<br />
PDF<br />
formats). About two-thirds of the material centers around mathematical logic.<br />
After the introduction of predicates, all of the examples in the logic<br />
portion<br />
of the course involve reasoning about properties of software, most of which is<br />
expressed in Haskell (a few are conventional looping functions).<br />
<p>Software examples include sum, sequence concatenation, logical operations on<br />
sequences, the Russian peasant algorithm, insertion and lookup in AVL <br />
trees, and<br />
other computations. Most of the properties verified relate to aspects of <br />
program<br />
correctness, but resource utilization properties are also verified in <br />
some<br />
cases. Several semesters worth of exams (finals and exams given during <br />
the term)<br />
are provided. The slides have matured through several offerings of the course.</p><br />
<p>The remaining third of the course discusses other standard topics<br />
in discrete<br />
mathematics, such as sets, functions, relations, trees, and counting.<br />
The web<br />
page provides access to a preview of the material. Exams and solutions are<br />
protected by a login procedure (to increase the comfort level of<br />
instructors<br />
wishing to use them in courses). The web page provides a link through<br />
which<br />
instructors may gain access to the full website.</p><br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:labra@lsi.uniovi.es Jose Emilio Labra Gayo],<br />
Dept. of Computer Science (EUITIO) University of Oviedo<br><br />
<b>Course:</b> Logic and Functional Programming<br><br />
<b>Student background:</b> The course is oriented towards third year undergraduate students in computer science. Usually, the students have been<br />
introduced to imperative languages like Pascal and Object <br />
Oriented Languages like C++<br><br />
<b>Materials:</b> Hugs; R. Bird "Introd. to FP using Haskell" (2nd Ed), J. E. Labra Gayo. "Introduction to the Haskell Language" (in spanish).<br><br />
<b>Web page:</b> http://lsi.uniovi.es/~labra/plf.html (in spanish).<br />
My FP page: http://lsi.uniovi.es/~labra/FuncProg.html<br><br />
<br />
<br />
<b>Instructor:</b> [mailto:fruehr@willamette.edu Fritz Ruehr]<br />
Willamette University, Salem, Oregon, USA (a small Liberal Arts College, about 1 hour from Portland & OGI)<br><br />
<b>Course:</b> CS 451 Topics in Computer Science: Functional Programming<br><br />
<b>Student background:</b> Data structures (I may also have required discrete math)<br><br />
<b>Materials:</b> Hugs 1.4 beta (I also taught Scheme); Haskell: The Craft of Functional Programming by Simon Thompson (I also used my own on-line lecture notes and labs and Kent Dybvig's text on Scheme)<br><br />
<b>Web page:</b> http://www.willamette.edu/~fruehr/451/<br><br />
<b>Comments:</b><br />
<blockquote><br />
The notes and labs I have on-line are in pretty rough form: many slide <br />
points are just one-line topical stubs I used as reminders in lecture.<br />
Many of the on-line materials are not linked into the (out of date)<br />
home page.<br />
<br />
I hope to have the course approved for next Fall as a regular offering<br />
(i.e., not as a "special topic") and should have more extensive<br />
on-line materials up by then.<br />
<br />
Teaching "bi-lingually" in Haskell and Scheme seemed like a good idea<br />
at the time, but next time around I will use Haskell as the main vehicle,<br />
perhaps taking some time near the end of the course to highlight some<br />
other languages (Scheme, ML, Clean).<br />
<br />
Some of my students used Conal Elliot's Fran and Paul Hudak's Haskore<br />
and liked them a lot; I was nice to have some significantly-sized<br />
applications that seemed more practical and fun to show off at the end<br />
of the course (I should have demonstrated these things at the beginning<br />
of the course to help with motivation). Next time around I would like to<br />
have a "beginner's prelude" or similar available to avoid problems with<br />
classes in type inference, Int vs. Integer, etc. These problems were a<br />
constant annoyance during lectures.<br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:J.Hamer@cs.auckland.ac.nz John Hamer],<br />
University of Auckland<br><br />
<b>Course:</b> Logic and Functional Programming<br><br />
<b>Student background:</b> Year 2 programming + some discrete maths<br><br />
<b>Materials:</b> Hugs 98, Haskell School of Expression, Page "Two Dozen Short Lessons in Haskell",<br><br />
<b>Web page:</b> http://www.cs.auckland.ac.nz/compsci360fc<br><br />
<br />
<br />
<b>Instructor:</b> [mailto:lengauer@fmi.uni-passau.de Chris Lengauer]<br />
University of Passau<br><br />
<b>Course:</b> Functional Programming<br><br />
<b>Student background:</b> two years of CS study<br><br />
<b>Materials:</b> hugs; Richard Bird's new text (PHI)<br><br />
<b>Web page:</b> not reachable from outside Passau<br><br />
<br />
<br />
<b>Instructor:</b> [mailto:cunningham@cs.olemiss.edu Conrad Cunningham]<br />
University of Mississippi<br><br />
<b>Course:</b> Functional Programming<br><br />
<b>Student background:</b> official -- senior or graduate standing; actual -- introductory programming, data structures, and discrete math<br><br />
<b>Materials:</b> Hugs on Unix and MS Windows systems;<br />
Mostly use the instructor's own set of lecture notes. Also Simon Thompson's HASKELL: THE CRAFT OF FUNCTIONAL PROGRAMMING. Previously used the Bird and Wadler textbook<br><br />
<b>Web page:</b> http://www.cs.olemiss.edu/~hcc/csci555/<br><br />
<b>Comments:</b><br />
<blockquote><br />
Although I am not a researcher in FP, I enjoy teaching the FP course.<br />
Most of the students take to the course after a few weeks. Hugs works<br />
reasonably well, but, of course, more pedagogically oriented error messages<br />
and other support tools would be helpful.<br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:leavens@cs.iastate.edu Gary T. Leavens],<br />
Iowa State University<br><br />
<b>Course:</b> Programming Languages 1<br><br />
<b>Student background:</b> undergraduate course in compilers or programming languaages<br><br />
<b>Materials:</b> Hugs 1.4; Thompson's Haskell: The Craft of Programming<br><br />
<b>Web page:</b> http://www.cs.iastate.edu/~leavens/ComS541.html<br><br />
<b>Comments:</b><br />
<blockquote><br />
Be sure to tell your students how to debug programs.<br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:jtod@dcs.gla.ac.uk John O'Donnell]<br />
University of Glasgow<br><br />
<b>Course:</b> Functional Programming<br><br />
<b>Student background:</b> Programming (in Ada), Algorithmic Foundations<br><br />
<b>Materials:</b> Hugs; Simon Thompson's book on Haskell<br><br />
<b>Web page:</b> http://www.dcs.gla.ac.uk/courses/teaching/level2/modules/#FP2<br><br />
<br />
<b>Instructor:</b> [mailto:chitil@informatik.rwth-aachen.de Olaf Chitil],<br />
RWTH Aachen, Germany<br><br />
<b>Course:</b> Functional Programming in Haskell<br><br />
<b>Student background:</b> basic programming skills (not necessarily in a<br />
functional language)<br><br />
<b>Materials:</b> Hugs 1.4; Hugs user manual, slide copies;<br />
additionally the `Gentle Introduction to Haskell', probably Bird's `Introduction<br />
to Functional Programming using Haskell' in the future.<br><br />
<b>Web page:</b> http://www-i2.informatik.rwth-aachen.de/Praktikum/SWP/ (in German)<br><br />
<b>Comments:</b><br />
<blockquote><br />
The course starts with 4 full time days of learning Haskell. During the semester<br />
the students (in groups of 2 students) have to implement a compiler and an<br />
abstract machine for a simple imperative language. They are given parts of the<br />
system and a manual on how to do the remaining parts (they have no prior<br />
knowledge on compiler construction).<br />
The most difficult construct for students to understand is the monad. I<br />
introduce IO without mentioning monads. Later I explain how to build a simple<br />
exception handling system based on the type `Maybe a' / `Error a'. Only<br />
subsequently I give the general definition of monads and present the list monad<br />
and a simple state monad. However, I fear that just to understand the bind<br />
operator `>>=' requires people to be quite comfortable with higher-order<br />
functions.<br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [http://web.comlab.ox.ac.uk/oucl/people/richard.bird.html Richard Bird], Oxford Brookes University<br><br />
<b>Course:</b> Functional Programming<br><br />
<b>Student background:</b> Elementary structured programming<br><br />
<b>Web page:</b> http://web.comlab.ox.ac.uk/oucl/courses/topics00-01/fp/<br><br />
<br />
<br />
<b>Instructor:</b> [mailto:paul.hudak@yale.edu Paul Hudak],<br />
Yale University, Dept of Computer Science<br><br />
<b>Course:</b> Functional Programming<br><br />
<b>Student background:</b> at least one programming course<br><br />
<b>Materials:</b> Hugs; my own textbook, which is under preparation<br><br />
<b>Web page:</b> none<br><br />
<br />
<br />
<b>Instructor:</b> [mailto:abf@cs.ucc.ie Alex Ferguson]<br />
University College Cork<br><br />
<b>Course:</b> Functional and Logic Programming<br><br />
<b>Student background:</b> Final year undergraduate<br />
<br><br />
<b>Materials:</b> Final year undergraduate<br />
Materials: Hugs 98; ghc; Simon Thompson, "Haskell: The Craft of<br />
Functional Programming" (2nd ed.)<br />
<br><br />
<b>Web page:</b> http://yeats.ucc.ie/~abf/CS4001/<br> <br />
<b>Comments:</b><br />
<blockquote><br />
This is the declarative programming option for 4th year<br />
undergrads, who have Java as a first programming language, and some<br />
knowledge of C and C++. The current final year have had some exposure<br />
to Haskell in first year, though this is no longer the case for our<br />
current intake.<br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:lky@nada.kth.se Leif Kusoffsky],<br />
Royal Institute of Technology, Stockholm<br><br />
<b>Course:</b> Functional Programming 2D1370<br><br />
<b>Student background:</b> The course is oriented towards third year<br />
undergraduate students in computer science. The students<br />
have been introduced to imperative languages like<br />
C and Object Oriented Languages like Java<br />
<br><br />
<b>Materials:</b> Hugs; Hudak : The Haskell School of Expression<br />
<br><br />
<br />
<br />
<b>Instructor:</b> Jeremy Bobbio -- INSIA<br><br />
<b>Course:</b> Functional and Logic Programming<br><br />
<b>Student background:</b> One year CS<br />
<br><br />
<b>Materials:</b> <br />
Hugs, GHC, Paul Hudak's Haskell School of Education<br />
<br><br />
<b>Web page:</b> http://etudiants.insia.org/~jbobbio/pafp/ (french)<br> <br />
<br />
<br />
<b>Instructor:</b> [mailto:antkaij@mit.jyu.fi Antti-Juhani Kaijanaho]<br />
University of Jyväskylä<br><br />
<b>Course:</b> Functional Programming 1 & 2<br><br />
<b>Student background:</b> third-year undergraduate and up<br />
<br><br />
<b>Materials:</b><br />
GHC, Gtk2HS<br />
<br><br />
<b>Web page:</b> [http://www.mit.jyu.fi/antkaij/opetus/fo/2005-2006/index.en.html]<br />
<br><br />
<b>Last run:</b> 2005&ndash;2006<br />
<br><br />
<!--<b>Comments:</b><br />
<blockquote><br />
(I'll write this later)<br />
</blockquote>--><br />
<br />
<b>Instructor:</b> [mailto:djd@comp.leeds.ac.uk David Duke]<br />
University of Leeds, School of Computing<br><br />
<b>Course:</b> Functional Programming<br><br />
<b>Student background:</b> Second and third year undergraduate<br />
<br><br />
<b>Materials:</b> ghc; Graham Hutton "Programming in Haskell"<br />
<br><br />
<b>Web page:</b> www.comp.leeds.ac.uk/se23/<br> <br />
<b>Comments:</b><br />
<blockquote><br />
This is an optional course that students currently can take in <br />
second or third year (from 2008/9 it will be third-years only).<br />
Students will have previously used Python and Java.<br />
Although the emphasis is on learning to solve problems within<br />
the functional paradigm, and how to develop solutions within<br />
Haskell, I also like to show students what is "under the<br />
bonnet" and conclude the module with an introduction to<br />
implementation issues, using material derived from<br />
"Implementing Functional Languages" by Simon Peyton Jones and <br />
David Lester. <br />
</blockquote><br />
<br />
<b>Instructor:</b> [mailto:popavdan@yahoo.com Popa V. Dan]<br />
University of Bacau, Romania <br><br />
<b>Course:</b> "Limbaje formale si automate" (Formal languages and automata) <br><br />
<b>Student background:</b> second-year undergraduate <br />
<br><br />
<b>Materials:</b> Hugs 98 (2002 revised version) included in Mandriva (Formely Mandrake) 10.0 Linux Distribution<br />
<br><br />
<b>Web page:</b> Not yet. Try the page of the "ro" community on www.haskell.org<br />
<br> [http://www.haskell.org/haskellwiki/Ro/Haskell Ro/Haskell webpage is here] <br><br />
<b>First run:</b> 2006&ndash;2007<br />
<br><br />
<br />
Haskell is used as an implementation languages in student's laboratories.<br />
The ideea was to provide a language powerfull enough to be able to express <br />
how to build a parser starting from a grammmar. The students are able<br />
to build small (monadic) interpreters for "while-languages" using a <br />
recommanded monad and a recommanded back-end. The labs are focusing on the <br />
grammar of the languages, on the modular (monadic) parsing as a tool for <br />
verifying and processing inputs which are not validable by finite state <br />
automata but by context free grammmars. Adaptability of the language, <br />
especially obtained manipulating and improving syntax is also a target.<br />
<br />
Support (concerning Haskell): "O introducere in Haskell prin exemple" by<br />
Dan Popa, published in january 31,2007 by <br />
[http://www.edusoft.ro Edusoft](in romanian) Contact the author if needed .<br />
<br />
Other recommanded books: "Gentle Introd to Haskell 98" and YAHT <br />
Recomanded papers: All about monadic parsing. <br />
Special message for Graham Hutton, Erik Meijer and P. Wadler and all <br />
other authors with similar interests from the Haskell <br />
community:<br />
<br />
Thank you very much for your papers concerning Monadic parsing and <br />
interpreters ! <br />
<br />
<br />
----<br />
<br />
== Comparative programming languages ==<br />
<br />
These courses teach general programming language principles, with<br />
Haskell as an example of a functional language.<br />
<br />
<b>Instructor: </b> Ruediger Marcus Flaig, University of Heidelberg (Germany)<br />
<br><br />
<b>Course:</b> An introduction to programming in bioinformatics <br><br />
<b>Student background:</b> different, but generally low<br><br />
<b>Materials:</b> Hugs-98 and lots of other stuff<br />
<br><br />
<b>Web page:</b> http://www.sanctacaris.net/rc.html<br> <br />
<b>Comments:</b><br />
<blockquote><br />
This course is designed to introduce life science students,<br />
that is to say, going-to-be biologists, physicians, biotechnologists<br />
and maybe others, to solving real-life problems (such as DNA sequence<br />
handling and analysis). Emphasis will be on paradigms (imperative /<br />
OO, functional, declarative). Although -- in order not to frighten<br />
people -- the official announcement mentions only Python, Haskell will<br />
be presented as THE purely functional language, and all solutions may<br />
be presented in either Python, Haskell or Java. I am very curious<br />
about the feedback I'll get, and maybe next term we shall focus more<br />
on Haskell. What I'd really need, though, is some life science related<br />
package for Haskell, such as BIOPYTHON and BIORUBY. <br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:ham@cs.utexas.edu Hamilton Richards],<br />
University of Texas (Austin)<br><br />
<b>Course:</b> Programming Languages (taught in 2005)<br><br />
<b>Student background:</b> <br><br />
<b>Materials:</b> Hugs 1.4; Sethi, Davie.<br><br />
<b>Web page:</b> http://www.cs.utexas.edu/users/ham/UTCS/CS345/<br><br />
<b>Comments:</b><br />
<blockquote><br />
I'm using Haskell in a programming-languages course, but it's distributed<br />
somewhat piecemeal through the course. Probably adds up to something like<br />
3-4 weeks (out of 15).<br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [http://www.cs.waikato.ac.nz/~marku Mark Utting]<br />
University of Waikato (New Zealand)<br />
<b>Course:</b> Programming Languages<br><br />
<b>Student background:</b> Two years of C++ and 1 year of Haskell<br><br />
<b>Materials:</b> Textbook "Programming Languages", Louden.<br />
<b>Web page:</b> http://www.cs.waikato.ac.nz/~marku/313<br><br />
<b>Comments:</b><br />
<blockquote><br />
The course covers at least two languages in each of the<br />
main paradigms (object-oriented, functional and logic programming),<br />
plus history, semantics and implementation issues.<br />
The Haskell section is about 2 weeks long and usually focusses on <br />
programming with higher-order functions and how that enables the<br />
language to be extended in application-specific ways<br />
(parser combinators, html-generation combinators etc.)<br />
</blockquote><br />
<br />
<b>Instructor:</b> [mailto:zeeshan@apiit.edu.pk M Zeeshan Ali Ansari],<br />
Asia Pacific Institute of Information Technology (Pakistan)<br><br />
<b>Course:</b> Advanced Programming Language Concepts<br><br />
<b>Student background:</b> Students having studied and worked on Imperative Programming Languages <br><br />
<b>Materials:</b> The Craft of Haskell, A Gentle Introduction to Haskell, Yet Another Haskell Tutorial.<br><br />
<b>Web page:</b> http://www.apiit.edu.pk<br><br />
<b>Comments:</b><br />
<blockquote><br />
This course compares and contrasts various programming language paradigms including Functional Programming. Out of 13 week course 5 to 6 of them are dedicated towards Haskell. The material is basically written in a way that enables imperative language programmers to understand the concepts and power of functional programming <br />
<br />
http://www.haskell.org/sitewiki/images/3/3d/Functional_Programming_Tutorial_By_Zeeshan_Ali_Ansari.doc<br />
<br />
<br />
</blockquote><br />
<br />
<b>Instructor:</b> John C. Mitchell,<br />
Stanford University<br><br />
<b>Course:</b> Programming Languages<br><br />
<b>Student background:</b> Some experience with Lisp/C/object-oriented languages.<br><br />
<b>Materials:</b> Concepts in Programming Languages (new Haskell chapters written with Kathleen Fisher)<br><br />
<b>Web page:</b> http://cs242.stanford.edu<br><br />
<b>Comments:</b><br />
<blockquote><br />
Central concepts in modern programming languages, impact on software development, language design trade-offs, and implementation considerations. Functional, imperative, and object-oriented paradigms. Formal semantic methods and program analysis. Modern type systems, higher order functions and closures, exceptions and continuations. Modularity, object-oriented languages, and concurrency. Runtime support for language features, interoperability, and security issues. <br />
</blockquote><br />
<br />
----<br />
<br />
== Advanced functional programming using Haskell ==<br />
<br />
These courses deal with the advanced issues such as semantics, type<br />
systems, or compilers. Includes a other advanced courses taught using<br />
Haskell. <br />
<br />
<b>Instructor:</b> [mailto:gmh@cs.nott.ac.uk Graham Hutton]<br />
School of Computer Science, University of Nottingham<br><br />
<b>Course:</b> Advanced Functional Programming<br><br />
<b>Student background:</b> At least one year of CS, including a course in Haskell<br><br />
<b>Materials:</b> Hugs; GHC; Graham Hutton, Programming in Haskell; own course material<br><br />
<b>Web page:</b> http://www.cs.nott.ac.uk/~gmh/afp.html<br />
<br />
<b>Instructor:</b> [mailto:rjmh@cs.chalmers.se John Hughes]<br />
Chalmers University, Gothenburg<br><br />
<b>Course:</b> Advanced Functional Programming<br><br />
<b>Student background:</b> General CS maturity; from this year most students have already used Haskell in introductory courses.<br><br />
<b>Materials:</b> Mainly hbc.; Papers (see web page)<br><br />
<b>Web page:</b> http://www.cs.chalmers.se/~rjmh/AFP<br><br />
<b>Comments:</b><br />
<blockquote><br />
The goal is to teach students how to solve substantial problems in a<br />
functional language --- `functional programming in anger', one might say. The<br />
emphasis is on design and use of suitable combinator libraries to simplify<br />
applications. Material covered includes monad design, use of CPS style,<br />
libraries for parsing, pretty-printing, and GUIs (presently fudgets). <br />
<br />
The course is taught in a `problem based' manner: lectures are few, while<br />
students solve three substantial programming problems during the term, with<br />
plenty of backup via group meetings. I adopted this teaching form three years<br />
ago, and it has led students to develop far better practical skills than most<br />
obtained from my earlier `lectures and exercises' courses, and I believe to<br />
use Haskell much more after the course's end.<br />
<br />
This course is optional in the third or fourth year, and is taken by a<br />
small-to-medium sized group of students.<br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:Olof.Johanssson@cs.umu.se Olof Johansson], Umeå Univesity, Department of Computing Science<br><br />
<b>Course:</b> Programming language semantics<br><br />
<b>Student background:</b> two terms of computer science studies and specificaly a course Programming language concepts<br><br />
<b>Materials:</b> Hugs and some HBC and GHC; Watt, Programming language, Syntax and Semantics<br><br />
<b>Web page:</b> http://www.cs.umu.se/local/kurser/TDBC05 (Only in swedish)<br> <br />
<br />
<br />
<b>Instructor:</b> [mailto:lyndon@cs.uwa.edu.au Lyndon While]<br />
The University of Western Australia<br><br />
<b>Course:</b> Functional Programming<br><br />
<b>Student background:</b> OOP, plus most of them have used Haskell previously<br><br />
<b>Materials:</b> hugs 98; none of the recent books really fit<br><br />
<b>Web page:</b> http://undergraduate.cs.uwa.edu.au/courses/230.301<br><br />
<b>Instructor:</b> [mailto:F.A.Rabhi@dcs.hull.ac.uk Fethi Rabhi],<br />
University of Hull (UK)<br><br />
<b>Course:</b> AI Problem Solving Techniques (using Haskell and Prolog)<br><br />
<b>Student background:</b> Haskell and Prolog programming<br><br />
<b>Materials:</b> HUGS; Thompson'96, own notes (soon to be published as a book).<br><br />
<b>Web page:</b> none<br><br />
<b>Comments:</b><br />
<blockquote><br />
It is very hard to justify learning Haskell unless it can be<br />
demonstrated in very practical situations (hence the provision<br />
of the above course).<br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:karczma@info.unicaen.fr Jerzy Karczmarczuk]<br />
University of Caen, Caen (France)<br> No links in the fr-Haskell page. Why not ?<br />
<b>Course:</b> Compilation<br><br />
<b>Student background:</b> General CS knowledge; students (should...) know Scheme and imperative languages, also some theory of languages and automata.<br><br />
<b>Materials:</b> <br />
Hugs, GHC, now also GHCi, and their documentation. Handouts: (still a little incomplete)<br />
Impossible to find the foolowing matterials.Files can not be found. <br />
* http://users.info.unicaen.fr/~karczma/matrs/Maitcomp/compilation_a.pdf<br />
* http://users.info.unicaen.fr/~karczma/matrs/Maitcomp/compilation_b.pdf<br />
* http://users.info.unicaen.fr/~karczma/matrs/Maitcomp/compilation_c.pdf<br />
<b>Comments:</b><br />
<blockquote><br />
This is a compulsory semestrial course in fourth year. Weekly: 1.5h<br />
course, 2.5H practice.<br />
One, but comprehensive assignment, taking 2 months or more.<br />
askell is our main coding tool. A little time is devoted by necessity<br />
to the language<br />
itself, but also from the perspective: "how would you compile such a<br />
language".<br />
"Standard stuff", such as parsing combinators, etc.is covered, but we<br />
don't begin with that.<br />
We start with the construction of small interpreters: from recursive<br />
Lisp-style to postfix,<br />
(Forth/PostScript style) constructing this last by partial evaluation<br />
(intuitively).<br />
We introduce control structures as lazy functions, operation<br />
sequencing through continuations,<br />
monads not only for parsing, but also for exceptions and<br />
non-determinism.<br />
We discuss (simply) the type inference. The code generator assembles a<br />
linear code by lazy<br />
concatenation of chunks which makes it trivial to deal with loops and<br />
cross-referencing<br />
fragments. Algorithms of garbage collection are presented (not<br />
implemented, though...) in<br />
a purely functional style.<br />
<br />
Students' opinion: "Frightening at first. Learning curve steep, but<br />
much less time spent on debugging, coding proficiency comes fast. Good for<br />
understanding what the compilation is about, but difficult to make a<br />
complete running program with all the I/O, etc.<br />
</blockquote><br />
<br />
<br />
<b>Instructor:</b> [mailto:jeffm@cse.uconn.edu Jeffrey A. Meunier], University of Connecticut<br><br />
<b>Course:</b> CSE240 Intermediate Computer Systems<br><br />
<b>Student background:</b> computer/microprocessor organization<br />
<br><br />
<b>Materials:</b> Hugs (Feb 2001); Bird ``Introduction to Functional<br />
Programming''; Furber ``ARM System-on-Chip Architecture''<br />
<br><br />
<b>Web page:</b> http://www.engr.uconn.edu/~jeffm/Classes/CSE240-Spring-2001/index.html<br> <br />
<b>Comments:</b><br />
<blockquote><br />
This is a course in the low level programming of microprocessor systems.<br />
The course will focus on the development of an emulator (virtual<br />
machine, or VM) for a small computer system based on a modern RISC<br />
microprocessor (the ARM CPU) using a high level programming language<br />
(Haskell), and assembly language programming of the VM. Development of<br />
the VM will occur in stages, starting with the simple direct-execution<br />
(stream-based) model, gradually moving to a more realistic memory-mapped<br />
model, including exception handlers, concurrent processes, and<br />
asynchronous external devices.<br />
</blockquote><br />
<br />
<b>Instructor:</b> Gabriele Keller<br />
The University of New South Wales<br><br />
<b>Course:</b> Concepts of Programming Languages<br><br />
<b>Student background:</b> Most of them have used Haskell in first year<br><br />
<b>Materials:</b> GHC, TaPL and `Programming Languages: Theory and Practice', papers<br><br />
<b>Web page:</b> http://www.cse.unsw.edu.au/~cs3161<br><br />
<b>Last run:</b> 2006<br><br />
<b>Comments:</b><br />
<blockquote><br />
Expose students to a theory of programming languages based on type<br />
theory and operational semantics as a mathematically sound framework<br />
which allows us to investigate the properties of a large number of<br />
programming language features, including:<br />
<br />
* on semantics of different programming languages and programming paradigms: imperative, object oriented, and declarative.<br />
* theoretical foundations of programming languages: syntax, operatational, axiomatic and denotational semantics.<br />
* implementation aspects of central language features, such as dynamic and strong typing, polymorphism, overloading and automatic memory management<br />
<br />
Assignments are in GHC/Haskell, and in the past have included implementing a<br />
mini-Haskell type checker, type inference and interpreter.<br />
</blockquote><br />
<br />
<b>Instructor:</b> Manuel Chakravarty<br />
The University of New South Wales<br><br />
<b>Course:</b> Advanced Functional Programming<br><br />
<b>Student background:</b> Most of them have used Haskell in first year<br><br />
<b>Materials:</b> GHC, papers (see the website)<br><br />
<b>Web page:</b> http://www.cse.unsw.edu.au/~cs4132<br><br />
<b>Last run:</b>2004<br><br />
<b>Comments:</b><br />
<blockquote><br />
To provide students with an understanding of the theory and practice of<br />
the design, use, and implementation of functional programming languages,<br />
such as Haskell<br />
<br />
This includes selected topics from the following areas:<br />
<br />
* Foundations: lambda calculus, semantics, and type systems.<br />
* Design: side-effects, exceptions, concurrency, and parallelism.<br />
* Implementation: abstract machines, program transformation, and memory management. <br />
* Programming techniques: combinator libraries, monads, generic programming, and meta programming.<br />
* Applications: domain specific languages, graphics, web programming, reactive systems, and scientific programming.<br />
</blockquote><br />
<br />
[[Category:Community]]</div>Aivan