
Iteration algorithms are the basic building blocks behind many of the 
MPL's algorithms, and are usually the first place to look at when 
starting to build a new one. Abstracting away the details of sequence 
iteration and employing various optimizations such as recursion 
unrolling, they provide significant advantages over a hand-coded 
approach.

..  Of all of iteration algorithms, ``iter_fold_if`` is the 
    most complex and at the same time the most fundamental. The rest of 
    the algorithms from the category |--| ``iter_fold``, ``reverse_iter_fold``,
    ``fold``, and ``reverse_fold`` |--| simply provide a more high-level 
    (and more restricted) interface to the core ``iter_fold_if`` 
    functionality [#performace]_.

    .. [#performace] That's not to say that they are *implemented*
    through ``iter_fold_if`` |--| they are often not, in particular 
    because the restricted functionality allows for more 
    optimizations.
