template<class R, class...Args>
auto Y = [](auto f) {
  auto action = [](auto f, auto&& action)->std::function<R(Args...)> {
    return [f, action](Args&&...args)mutable ->R{
      return f( action(std::ref(f), action), std::forward<Args>(args)... );
    };
  };
  return action(f, action);
};
Some fun C++ stuff I've done round here:
- A: Convert a run-time value or type to a compile-time value, also works with lists of types.
 - A: Named operators, does what it says on the tin
 - A: can_apply, a useful trick that helps make traits like "can serialize" or "can convert to string".
 - A: task, a move-only implementation of 
std::function. - Q: Function curry, that does partial binds and the like.
 - A: Me playing around with hana-like metaprogramming, together with the idea that template work best if everything (including templates) is a type.  Here is some evil operator abuse, where I manipulate types with 
+. - A: 
std::functionthat returns vectors of its own type. 
Here is a neat question I didn't ask:
the answer seems to be "actually, nope, but nobody noticed".
An amusing link:
which will show your reputation history on stack overflow, if you like that kind of thing.
ey eir em