A couple of notes:
1. &, == etc are likely to be heavily overloaded by code that knows nothing
about laws you imply. For example, a & identity(type(a)) === a' might not hold
for some container type with referential equality - but it still would be a
`Monoid by your condition. In concepts it's
You're mixing old and new API here. request proc from old API (the one that
doesn't use HttpClient) does indeed have extraHeaders parameter. It is,
however, deprecated. The new API tends to pass headers in a client. There is,
however, an option to pass per-request headers to new request proc in
There is a new
[asyncstreams](https://github.com/vegansk/nimboost/blob/master/src/boost/io/asyncstreams.nim)
module in nimboost. It provides API close to streams module in stdlib, so it's
probably too low-level for your standards, though.
As for a cleaner abstraction, you might want to look int