flow

Description

The flow function adaptor provides function composition. It is useful as an alternative to using the pipe operator | when chaining functions. It is similiar to compose except the evaluation order is reversed. So, flow(f, g)(0) is equivalent to g(f(0)).

Synopsis

template<class... Fs>
constexpr flow_adaptor<Fs...> flow(Fs... fs);

Semantics

assert(flow(f, g)(xs...) == g(f(xs...)));

Requirements

Fs must be:

Example

#include <boost/hof.hpp>
#include <cassert>
using namespace boost::hof;

struct increment
{
    template<class T>
    T operator()(T x) const
    {
        return x + 1;
    }
};

struct decrement
{
    template<class T>
    T operator()(T x) const
    {
        return x - 1;
    }
};

int main() {
    int r = flow(increment(), decrement(), increment())(3);
    assert(r == 4);
}