refined core.clj functions