I was checking out the Channel 9 lectures on functional programming using Haskell. It’s like getting a semester of a functional programming class for free! You can find the list of channel 9 lectures here.

I’m more interested in functional programming in F# than Haskell so after an example is presented, I’m translating it into F# as an exercise and to test my understanding.

One of the first concepts introduced in chapter 2 is functional composition. Functional composition is a way to express a function in a shorter form without changing its meaning. It is a way of expressing a function without variable repetition.

The example used from Haskell was as follows:

``````double x = x + x quad
x  = double (double x)
``````

This is in the form `f(x) = g(g(x))` Restating this with functional composition would look as follows:

``````double x = x + x
quad x = double . double
``````

Here the . operator means “restated with functional composition”, not multiplication as you might expect.

This is equivalent to `f(x) = g . g`

F# also has a functional composition operator: `>>`

Here’s the same example in F#:

``````let double x = x + x
let quad = double >> double
``````

We could do something similar with the F# pipe:

``````let double x = x + x
let quad x =  x |> double |> double
``````

I like the conciseness of the first example but I think intent is clearer to most readers in the second.