pub fn compile_declarations<I, D>(declarations: I) -> Vec<(String, Procedure)> where
    I: IntoIterator<Item = D>,
    D: Borrow<Declaration>,