template struct YFunctor { const std::function(std::function)> f; YFunctor(std::function(std::function)> _f) : f(_f) {} B operator()(A x) const { return f(*this)(x); } }; template std::function Y (std::function(std::function)> f) { return YFunctor(f); }