- Introduction to Haskell and Lazy, Functional Programming
- tuples
- polymorphism
- higher order functions
- strings & characters
- lazy evaluation

- Datatypes
- Data-Type declarations
- Defining functions over datatypes using patterns,
- Enumerations,
- The Shape Datatype of the text.

- Programs and Proofs
- Program Manipulation
- Comparing the functional paradigm
- Actions and Haskell,
- Monads,

- Simple Graphics.
- Using the graphics primitives,
- Drawing Primitive Shapes,
- Sierpinski’s Triangle,
- Snow-flake,
- Coordinate Systems,
- Position independent shapes,
- Drawing the Shape Data-type.

- Polymorphism
- Polymorphic Functions,
- Polymorphic datatypes,
- Type Constructors define polymorphic Constructor functions,
- Recursive datatypes,
- Higher Order functions,
- Perimeters of Shapes.

- Trees
- Kinds of trees - branching factor,
- functions over trees,
- patterns of recursion - the fold for trees,
- Arithmetic expressions,
- Infinite trees.

- Regions
- Sets and characteristic functions,
- Regions,
- Is a point in a Region?,
- Currying,
- Sections,
- Anonymous functions,
- function composition.

- Pictures
- Low level graphics bit-maps: G.Region,
- From Region to G.Region,
- Shape to G.Region,
- Drawing G.Region,
- Reactive Pictures.

- Proofs by Induction
- Review of Proofs by calculation,
- Structure of Proofs by induction over lists,
- Proofs by induction with case analysis,
- Proofs by structural Induction,
- Proofs by induction over Trees.
- Prooving two functions are equal.
- Proving things about Monadic expressions

- The Haskell Class System
- Classes as predicates on types
- Instance declarations,
- Inheritance and dependent classes,
- Derived instances,
- The Show class,
- The Fix operator from homework #5.

- Simple Animations
- Buffered graphics,
- Animations in Haskell,
- Complex animations,
- Lifting primitives to animations,
- Behaviors,
- Type classes animations and Behaviors,
- Time translation.

- Infinite Lists and Streams
- Infinite lists v.s. Streams,
- Normal order evaluation,
- Recursive streams,
- Stream Diagrams,
- Lazy patterns,
- Memoization,
- Inductive properties of infinite lists.

- Reactive Animations
- Simple Animations - Review.
- Reactive animations.
- Vocabulary for reactive animations
- Introduction by Examples.
- Implementation of behaviors and events.

- File IO, Channels and Concurrency
- Files, Channels, and Handles.
- IO exception handling.
- First Class Channels.
- Concurrency and ForkIO.

- Higher Order Types
- Type constructors that take types as arguments.
- Functor,
- Monad,
- MonadPlus and MonadZero.

- Functional Music
- Haskore System.
- The Music datatype.
- MIDI Instruments.
- Pitch & absolute Pitch.
- Composing Music:
- Delay,
- Repeating,
- Transposing.
- Manipulating Music: Duration, Cutting, Reversing.
- Percussion.
- Presentation and the MIDI file format

- Interpreting Music
- Performance
- Linearizing music
- MidiFile structure