i thought a lot about this.  I think it's dramatically less clean to have these kicking around, so i'd really only want to do it when it makes sense computationally.

I'd prefer
nonlinear_equality_constraints(x) = 0
clb <= nonlinear_inequality_constraints(x) <= cub    - with default cub = 0, clb = -inf
Aeq*x = beq
Ain*x <= bin
lb <= x <= ub

but let's finalize this decision as a group.