1. A method for converting a set of program environment data stored in thunks to new set of program environment data stored as values, using normalization, and accepting captured program environment data stored in a combination of thunks and values, comprising: first determining, using a computer, for certain functions and expressions within input computer code, whether each function and expression may have any recursive dependencies; generating eager evaluation mode executable code for one or more elements of the input computer code based on the act of determining; providing both eager evaluation mode executable code and non-eager evaluation mode executable code to runtime software that supports both eager and non-eager evaluation modes; second determining that executing the eager evaluation executable code for one or more of the elements will generate observably equivalent results to the non-eager evaluation executable code for the one or more of the elements; invoking, using the runtime software, the eager evaluation executable code based on the determination; logging one or more writes of thunks to mutable storage cells; intercepting reads to mutable storage cells; annotating one or more thunks with meaningful information related to the computational effects they may cause; and returning the most recently logged thunk for that storage cell in order to make a next or subsequent iterative step of second determining.