#pragma once #include "combinations/tuple.hpp" namespace cl{ struct sigil_t{ constexpr sigil_t(){} }; sigil_t sigil; template class compose{ // f . next a f; compose next; public: compose(a fn1, c ...oth) : f{fn1} , next{oth...} {} template auto operator()(t ...Args){ return next(f(Args...)); } }; template class compose{ // f . g a f; public: compose(a fn1) : f{fn1} {} template auto operator()(t ...Args){ return f(Args...); } }; template auto operator*(a fn1, b fn2) { return compose(fn1, fn2); } }