source $GRIMOIRE/CMAKE_FUNCTIONS
           SPELL=range-v3
         VERSION=0.12.0
     SOURCE_HASH=sha512:b8b632b8e0f2a3234ef61813212c237f648cd741e816ca57bd86f82f6459f7d755e2b70361d2aa43847874fb546a31a792ab1c3ba90292818ae7313438dc62d0
          SOURCE="$SPELL-$VERSION.tar.gz"
   SOURCE_URL[0]=https://github.com/ericniebler/$SPELL/archive/refs/tags/${VERSION}.tar.gz
SOURCE_DIRECTORY="${BUILD_DIRECTORY}/${SPELL}-${VERSION}"
        WEB_SITE="https://github.com/ericniebler/$SPELL"
      LICENSE[0]=https://github.com/ericniebler/$SPELL/blob/master/LICENSE.txt
         ENTERED=20210604
           SHORT="composability for C++ standard library iterators"
cat << EOF
Ranges are an extension of the Standard Template Library that makes its
iterators and algorithms more powerful by making them composable. Unlike
other range-like solutions which seek to do away with iterators, in range-v3
ranges are an abstration layer on top of iterators.

Range-v3 is built on three pillars: Views, Actions, and Algorithms. The
algorithms are the same as those with which you are already familiar in the
STL, except that in range-v3 all the algorithms have overloads that take
ranges in addition to the overloads that take iterators. Views are composable
adaptations of ranges where the adaptation happens lazily as the view is
iterated. And an action is an eager application of an algorithm to a container
that mutates the container in-place and returns it for further processing.

Views and actions use the pipe syntax (e.g., rng | adapt1 | adapt2 | ...) so
your code is terse and readable from left to right.
EOF
