             (conj
               v
               (ArgumentCompleter.
-                [(StringsCompleter. (conj (mapv name (cmd-aliases k)) (name k)))
-                 (proxy [Completer] []
-                   (complete [buffer cursor candidates]
-                     (if (not (nil? fn-args))
-                       (.add candidates (str "Arguments: " fn-args)))
-                     (if (not (nil? completion-hint))
-                       (.add candidates (str completion-hint)))
-                     (if (not (and (not (nil? fn-args)) (not (nil? completion-hint))))
-                       (.add candidates ""))
-                     0))]))
+                #^"[Ljline.console.completer.Completer;"
+                (into-array
+                  Completer
+                  [(StringsCompleter. #^java.util.Collection (conj (mapv name (cmd-aliases k)) (name k)))
+                   (proxy [Completer] []
+                     (complete [buffer cursor #^java.util.List candidates]
+                       (if (not (nil? fn-args))
+                         (.add candidates (str "Arguments: " fn-args)))
+                       (if (not (nil? completion-hint))
+                         (.add candidates (str completion-hint)))
+                       (if (not (and (not (nil? fn-args)) (not (nil? completion-hint))))
+                         (.add candidates ""))
+                       0))])))
             v)))
       []
       (keys cmds))))
 
 (defn set-up-alternate-scrolling
-  [height width alternate-height alternate-scroll-separator prompt-string in-rdr]
+  [height width alternate-height alternate-scroll-separator prompt-string #^ConsoleReader in-rdr]
   (let [prompt-width (count prompt-string)
         adjusted-prompt-string (str "\u001B[" (- height alternate-height) ";0H"
                                     "\u001B[2K"

  [opts in-chan]
  (let [rdr-fn (create-repl-read-fn opts)]
    (fn [request-prompt request-exit]
      (let [line (async/<!! in-chan)]
        (if (and (not (nil? line))
                 (not (.isEmpty line))
                 (not (-> line (.trim) (.startsWith *comment-begin-string*))))

                  (reset! new-line true))
                (write
                  ([obj]
                    (let [#^java.lang.String s (condp instance? obj
                                                 java.lang.String obj
                                                 java.lang.Integer (str (char obj))
                                                 (str obj))
                          term-height (.getHeight term)]
                      (binding [*out* stdout]
                        (when @new-line
