16    template <
class F, 
class... Fs>
 
   17    auto composed(F&& arg, Fs&&... args) {
 
   18        return [fun = std::forward<F>(arg), ... functions = std::forward<Fs>(args)]<
class X>(X&& x) 
mutable {
 
   19            if constexpr (
sizeof...(Fs)) {
 
   20                return composed(std::forward<Fs>(functions)...)(std::invoke(std::forward<F>(fun), std::forward<X>(x)));
 
   22                return std::invoke(std::forward<F>(fun), std::forward<X>(x));