I find it weird that this API asymmetry exists. Is there a reason behind this I can't see?
Btw, I think taking W by value will allow enforcing flushing on finish (kind of tangential to #77). Not sure if it will unnecessarily limit some use-cases or not 🤔