This series of posts will introduce you to the fundamentals of functional programming -- what does it really mean to "program functionally", and how this approach differs from object oriented or imperative programming.

- Thinking Functionally: Introduction. A look at the basics of functional programming.
- Mathematical functions. The impetus behind functional programming.
- Function Values and Simple Values. Binding not assignment.
- How types work with functions. Understanding the type notation.
- Currying. Breaking multi-parameter functions into smaller one-parameter functions.
- Partial application. Baking-in some of the parameters of a function.
- Function associativity and composition. Building new functions from existing ones.
- Defining functions. Lambdas and more.
- Function signatures. A function signature can give you some idea of what it does.
- Organizing functions. Nested functions and modules.
- Attaching functions to types. Creating methods the F# way.
- Worked example: A stack based calculator. Using combinators to build functionality.