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".