Re-organize the modules to correct the dependency. Get rid of dependency of Complier on Evaluater. Utilize the guard condition of a defition