                       (if-let [info (:info t)]
                         {:info info}))))))
 
-(defn -type
-  ([pred-form pred]
-   (-type pred-form pred nil nil))
-  ([pred-form pred gfn info]
-   (->Type pred-form pred gfn info)))
-
 (defmacro type [pred]
-  `(-type '~(or (-> pred #?(:clj  resolve
-                            :cljs (resolve &env)) ->sym) pred) ~pred))
+  `(->Type '~(or (->> pred #?(:clj resolve, :cljs (resolve &env)) ->sym) pred) ~pred nil nil))
 
 (defn with-info [^Type t info]
   (map->Type (assoc t :info info)))

  (gen* [_ _ _ _] (if gfn
                    (gfn)
                    (gen/gen-for-pred pred)))
  (with-gen* [_ gfn] (-type form pred gfn info))
  (describe* [_] `(spec-tools.core/type ~form))
  IFn
  #?(:clj  (invoke [_ x] (pred x))

(defprotocol TypeLike
  (type-like [this]))

(declare ->Type)

(defrecord Type [form pred gfn info]
  #?@(:clj
