pub fn compile(
    session: &Session,
    program: &ProgramBody
) -> Result<PathBuf, Box<dyn Error>>