Welcome to Functional Programming 2017 (TDA 452, DIT 142)!
The first lecture was on Monday 2017-10-30
at 13:15.
Some course election info
was presented on April 20, 2017.
Purpose
The course is an introduction to Functional Programming for students
who know how to program. The students come mainly from the masters
program at Chalmers and the University of Göteborg.
See the course plan for more details.
Please note that
you cannot include this course as part of a degree which already
contains TDA 555
Introduction to Functional Programming. The contents
are too similar (although the exam for this course is more
demanding). If you took TDA 555 or similar please consider
TDA 342
Advanced Functional Programming.
People
Lectures & Exercises
TimeEdit Schedule
The contents of the lectures is preliminary.
There might be minor adjustments or shifts in time.
The videos of the lectures
recorded in 2012 & 2011 are still mostly up-to-date.
| Monday 13.15 (HC2)
| Thursday 10.00 (HC3)
|
Self-study exercises
|
Week 1
| Intro to Haskell.
Tuples & lists.
Types.
[Intro.hs]
| Data types.
[DataTypes.hs]
|
Getting started with Haskell
|
Week 2
| Working with lists
(recursion, pattern matching)
[WorkingWithLists.hs]
|
Higher Order Functions.
[HigherOrderFunctions.hs]
Videos: Part 1, Part 2.
|
Recursion and data types
|
Week 3
| Input/Output.
[countWords.hs,
InputOutput.hs,
Hangman.hs]
| Overloading and Type Classes.
[Overloading.hs]
QuickCheck test data generators.
[TestDataGenerators.hs]
|
Lists and List Comprehensions
|
Week 4
| Abstract data types.
[Reverse.hs,
Queue.hs]
Recursive data types.
[ArithmeticQuiz.hs]
| Parsing.
[ParsingExamples.hs,
Parsing library]
|
IO, Test Data and Properties
|
Week 5
| Symbolic Expressions.
[SymbolicExpressions.hs]
Monads.
Monadic Evaluators.
[MonadicEvaluators.hs]
| Monads recap.
Complete the monadic evaluator.
Lazy · Eager · Parallel.
[Fib.hs,
Laziness.hs]
|
Recursive data types
|
Week 6
| Web/GUI programming
[HasteIntro.hs,
WebFudgetsIntro.hs]
More info:
Haste,
WebFudgets.
| Implement a small
functional language.
[SmallFunctionalLanguage.hs]
Tying up loose ends.
Questions and answers.
|
Week 7
| No lectures (Project work!)
|
Lab Assignments
In the table below you will find links to lab assignments which have to be
handed in.
- Each assignment has a submission deadline at which you
must submit your solutions. Your first submission is expected to be a serious
attempt to complete the lab.
- If your submission does not pass (it's incorrect or
simply badly coded) then you must resubmit. You have until the final
deadline.
- The final deadline is absolute:
it is the last possible date to hand
in your solutions. If your solutions are not passed you get no further chances
this term.
Lab | Part | Submission deadline | Final deadline
|
---|
Lab 1
|
| Wednesday, Week 1 (2017-11-01)
| Friday, Week 2 (2017-11-10)
|
Lab 2
| A
| Wednesday, Week 2 (2017-11-08)
| Friday, Week 4 (2017-11-24)
|
B | Wednesday, Week 3 (2017-11-15)
|
Lab 3
| A | Wednesday, Week 4 (2017-11-22)
| Friday, Week 6 (2017-12-08)
|
B | Wednesday, Week 5 (2017-11-29)
|
Lab 4
| Proposal | Monday, Week 6 (2017-12-04)
| Thursday, Week 6 (2017-12-07)
|
Project
| Wednesday, Week 7 (2017-12-13)
| Friday, 2017-12-22
|
Note that the deadlines are firm and are controlled strictly by the lab
reporting system. Therefore you must submit by the deadlines.
Examination
The examination of the course has two parts:
- The weekly assignments.
- A written exam in the end of the course. Length: 4 hours.
Permitted materials: dictionary.
To pass the course it is necessary to pass all home assignments and the exam.
The exam dates are published on the
syllabus
page in the study portal.
At the time of this writing the published exam dates for this course are:
- Thursday 2018-01-11, 14:00.
- Thursday 2018-04-05, 14:00.
Remember that you have to
sign up for the exam ahead of time
(follow the link to see when you need to sign up).
Resources
Please also read the page on how to get help!
Installing Haskell
- The Haskell Platform
is easy to install and includes GHC, GHCi, a basic set of libraries and
the Cabal tool for easy installation of additional libraries from
Hackage.
Haskell Libraries
- Hoogle:
search for standard library functions by name or type.
- Hierarchical Libraries:
documentation of the standard libraries provided with
the latest version of GHC.
- Hackage:
a large collection of libraries. Here you can find everything from the
smallest my-first-haskell-project to large, mature multi-year projects.
Use
cabal install
to install packages from Hackage.
- Hayoo:
search Hackage by function name/type or package name.
Help/community/reference info
Old Exams
Books
There is no course textbook.
For those who like to follow a textbook I can recommend the following:
- Learn You a Haskell for Great Good!
by Miran Lipovača
Read it online for free or buy the printed version.
Very nice tutorial with humour.
- Programming in Haskell
by Graham Hutton
2nd edition of a compact and well-written Haskell book that is a good
fit for this course. Available as paperback and eBook.
- The Craft of Functional programming
by Simon Thompson
A more basic book with a slower pace but still covering most of
the material in the course. I recommend the 3rd edition which has some
coverage of quickCheck (a testing approach used extensively in the course).
Also available at the Chalmers bookstore.
- Real World Haskell
by Bryan O'Sullivan, Don Stewart, and John Goerzen
Also available online. This is more advanced and more oriented
towards practical Haskell programming. A good book to have on the shelf
if you continue with Haskell. This is the course book for the
Advanced Functional Programming course.
Related courses