switch to existential quantification; use IORef in VPut so I can free buffer on error; code for putVRef