In working out values, we maybe need to divide into cases. These give guards, which follow commas. We can use the where clause to make these smaller calculations, for instance. A problem is often solved by breaking it into parts. These parts might be functions which are to be called by other functions, or to be composed together.
Function composition is useful in many examples.
A task is broken into parts, the inputs being transformed to an intermediate value, then the result is calculated from this value. Another way of breaking a problem down is to write the solution using things which then have to be defined themselves in a where clause. It can also be useful to work bottom up , writing functions we know we will need in our overall solution. Suppose we are asked to build an index for a document. These can be built and tested separately.