specs translated from clj-; only needs implementation ;-)