pub fn optimize<'a, NumEnum: 'a + Send + Sync, StrEnum: 'a + Send + Sync + Debug + PartialEq, FilterEnum: 'a + Send + Sync, Env: Environment<'a, NumEnum, StrEnum, FilterEnum>>( ast: Vec<Expr<'a>>, env: &'a Env, ) -> Vec<Expr<'a>>