Making the assertions in AboutFunctions.fs pass

What did I learn?...

A function is created with 'let' followed by the function name, followed by the parameter names (separated by spaces).

You can add type annotations to the parameters to help the type inference.
An error like "Lookup on object of indeterminate type based on information prior to this program point...." usually means there's a missing type annotation.

Whitespace matters & tabs aren't allowed...so a function body is denoted by indenting with spaces to the same level.

The last line of a function is its return value

A function is called with the function name followed by the arguments separated by spaces. But, the following confused me, because it looks like traditional method invocation rather than the F# syntax of calling a function...

    double(double(x))

...but I think it's just to resolve the precedence. It's more like...

    double (double x)

...which gives the same result.

You can capture variables from outside a function by a closure. Captured variables can't be mutable.