Appreciate time and space complexity as they pertain to functional programs. Judge in which situations a functional style of programming is appropriate. The nature of functional programming. Introductory first-order functional programming, including function definitions, reasoning techniques, and the model of computation. Polymorphism and type inference.
Higher order constructs.
Program design and programming style. Second half of year. Two lectures per week, plus weekly drop-in tutorials, examples class and lab session every 3 weeks. Practical exercises in writing functional programs and reasoning about them. Understand caching and indirection, and be able to evaluate their effects.