We would store a merkle root of the list of addresses who have voted. Then each time someone votes, they would send a merkle proof of exclusion from this list to prevent double voting. If the voter has not already voted, the proof would pass and then the merkle root would be updated to include the new voter.
Currently we write a new storage slot for each voter, whereas this approach would mean we just need a single slot containing the merkle root for all voters.