Accommodation and courses take place in a castle depending of the CEA (French Alternative Energies and Atomic Energy Commission) at Cadarache, South of France, from June 11 till June 22, 2012.
The aim of the summer school is to give a thorough and application-oriented introduction to functional programming using the programming language Haskell. A special focus is on parallel and concurrent programming, highlighting the ways in which features such as strong typing and purity make it dramatically easier to write reliable parallel or concurrent code. The school is split into three different courses that highlight different aspects of functional programming. All courses consist of lectures and hands-on sessions where everyone can try out the language on several exercises. No preliminary knowledge of functional programing is required.
** Lecture A : Introduction to Functional Programming
Ralf Hinze http://www.cs.ox.ac.uk/ralf.hinze/
Functional programs are easier to develop and reason about than their imperative counterparts. This makes them an ideal vehicle for the exploration of data structures and modularisation. This course provides the solid foundations of functional programming using the language Haskell as a vehicle.
We shall be mostly concerned with programming in the small, but we also develop the necessary skills to solve medium-sized programming problems in the functional paradigm. Specifically, we cover expressions, types, type classes, polymorphism, higher-order functions and monads.
** Lecture B : Practice of Functional Programming
Andres Löh http://www.andres-loeh.de/
In this course, we will look at the practical problems that arise while moving from the first small programs written while learning the language to large projects with a multitude of modules and code that must be both correct and efficient.
How can we obtain more information about a program? How can we write code such that it is easy to understand? What about performance? What are potential pitfalls and how can we avoid them? How to create programs that will be reusable, and robust in the presence of change?
We will look at libraries, data structures, design patterns, testing, reasoning about performance as well as introduce a multitude of useful tools that Haskell programmers can find for free.
** Lecture C : Parallel and Concurrent Programming in Haskell
Simon Marlow http://research.mi crosoft.com/en-us/people/simonmar/
While most programming languages nowadays provide some form of concurrent or parallel programming facilities, very few provide as wide a range as Haskell. The Haskell language is fertile ground on which to build abstractions, and concurrency and parallelism are no exception here. In the world of concurrency and parallelism, there is good reason to believe that no "one size fits all" programming modelexists, and so prematurely committing to one particular paradigm is likely to tilt the language towards favouring certain kinds of problem. Hence in Haskell we focus on providing a wide range of abstractions and libraries, so that for any given problem it should be possible to find a tool that suits the task at hand.
In this course we will introduce the main programming models available for concurrent and parallel programming in Haskell. The course will cover basic parallel programming, concurrent programming with MVars and Software Transactional Memory, asynchronous exceptions, building concurrent server applications, building distributed applications with Cloud Haskell, and will briefly cover GPU programming in Haskell.