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.