(nilable pred)
returns a spec that accepts nil and values satisfiying pred
(defmacro nilable [pred] (let [pf (res &env pred)] `(nilable-impl '~pf ~pred nil)))