You can use the fclabels package [1] for this. It makes record labels first class, and also provides functions to update parts of a record in the state monad [2].