(defn interval
"Construct an interval for an assignment to a var. intervals may
be more efficient that the domain type when the range of possiblities
is large."
([ub] (IntervalFD. 0 ub))
([lb ub]
(if (zero? (core/- ub lb))
ub
(IntervalFD. lb ub))))