the variables from [old_state], adding them to [current_state],
returning a new state. Note the order of arguments. *)
+val copy_prev_state : t -> t -> t
+(** [copy_prev_state old_state current_state -> new_state] is an
+ obscure function used to make the [prev] function work predictably
+ across file reloads. Since a file reload creates a new state
+ object, it would normally "forget" that jobs had run previously,
+ so any job that used [prev], [changes] etc would run again
+ unnecessarily. This function copies the prev state, allowing us
+ to remember which jobs ran previously and the state of the
+ variables at that time, making these functions work predictably.
+ State is only copied for jobs that have explicit names. *)
+
val get_variable : t -> string -> Whenexpr.variable
(** Return the value of a variable, when unknown variables defaulting
to empty string. *)