Here's a concrete suggestion: have Data.Binary.Put export the existing function tell :: Builder -> Put and also execPut :: PutM a -> Builder execPut = sndS . unPut