pub fn translate_type_with<Id, T, U, I, F>(
    interner: &mut I,
    typ: &Type<Id, T>,
    translate: F
) -> Uwhere
    T: TypePtr<Id = Id>,
    U: TypePtr<Id = Id>,
    Id: Clone,
    T::SpannedId: Into<U::SpannedId> + Clone,
    F: FnMut(&mut I, &T) -> U,
    I: TypeContext<Id, U>,