When I see this, I understand why the Go crowd didn&#x27;t put generics or macros in Go.  It&#x27;s so easy to write useful but awful things with them, and they&#x27;re really hard to fix and debug.<p>This is getting to be a big problem with Rust. The language, or maybe its community, encourages cutesy stuff like this.  Remember &quot;Diesel&quot;, the Rust compiler for SQL, from a few days ago?  Just because you can doesn&#x27;t mean you should. Too much fancy template stuff is being baked into the low level libraries. This may not end well.<p>C++ went down this road. The template system turned out to be more powerful than intended. Then people started writing cool stuff as fancy templates. Then the C++ committee added features to support the fancy templates better. Overly elaborate templates damaged C++; nobody could figure out what was going on. Use of C++ for new work declined.<p>All of this comes from smart people with good intentions. But when there&#x27;s too much of this stuff, the mental load required to keep up with all of it becomes excessive.  Especially if it changes a lot.