I am reading this tutorial on Haskell. They define function composition as the following:
(.) :: (b->c) -> (a->b) -> (a-
Function composition is a way to chain two or more functions together. It's often likened to shell piping. For example, in a Unix-style shell, you might write something like
cat foo.txt | sort -n | less
This runs cat
, feeds its output to sort
, and feeds the output from that to less
.
Strictly, this is like the Haskell $
operator. You might write something like
sum $ sort $ filter (> 0) $ my_list
Notice that, unlike the shell example, this reads from right to left. So we start with my_list
as input, then we run filter
over it, then we sort
it, and then we calculate the sum
of it.
The function composition operator, .
, does something similar. The example above produces a number; the example below produces a function:
sum . sort . filter (> 0)
Notice that we didn't actually feed a list into this. Instead, we've just created a new function, and we can feed several different lists to that function. For example, you might name this function:
my_function = sum . sort . filter (> 0)
Or you might pass it as an argument to another function:
map (sum . sort . filter (> 0)) my_lists
You can basically use it anywhere that you can use any other sort of function. It's just a quick and readable way of saying "I want to chain these functions together".