It would be easier to describe a pass if the unchanged parts of the syntax could be passed along implicitly using a record update. Also probably a single `extendAll`-type function taking the big record and extending everything at once.