Functional programming
 data definitions
 datatypes
 lists, tuples, functional types
 function definitions
 higherorder functions
 polymorphism
 typing, overloading, type classes, type inference
 abstract data types and modules
 lazy evaluation
 functors, applicative functors, monads, I/O, actions, side effects
 proofs of program properties, dependent types, correspondence
between types and propositions, proofs and programs
Classes will cover concepts and exercises will be solved and
proposed to illustrate the concepts introduced, using the
programming language Haskell (and variations of Haskell supported by
ghc, the prevailing Haskell compiler, and its brother interpreter
ghci).
A short introduction to Agda will be given, for introducing proofs
of program properties using dependent types.
Bibliography:

Programação em Haskell , Carlos
Camarão, Lucília Figueiredo, Rodrigo Ribeiro,
Cristiano Vasconcellos, 2017 (under construction).
Complementary:
 Thinking Functionally with Haskell, Richard Bird,
Cambridge University Press, 2015.
 Simon Thompson, The Craft of Functional Programming, 3rd edition, AddisonWesley, 2011.
 Koen Claessen's course lecture notes and exercises
 Miran Lipovaca, Learn You a Haskell for Great Good: a Beginner's Guide ,
No Starch Press, 2011.
 Richard Bird, Introduction to Functional Programming using Haskell, 2nd edition, Prentice Hall 1998.
 Real World Haskell, Bryan O'Sullivan, Don Stewart, John Goerzen, O'Reilly, 2009.
 Paul Hudak, The Haskell School of Expression: Learning Functional Programming through Multimedia, Cambridge Univ. Press, 2000.
 http://haskell.org
Evaluation:
 Participation: 15
 1 Exam: 25
 Exercises: 60
Course support material:
Download the Haskell Platform, which comes with the compiler (ghc) and interpreter (ghci) used in the course.