          m ks nil))
 
 (t/ann reduce-in (t/All [x]
-                   (t/IFn [x (t/Vec t/Any) (t/IFn [t/Any -> t/Any]) -> x]
-                         [x (t/Vec t/Any) (t/IFn [t/Any -> t/Any]) t/Any -> x])))
+                   (t/IFn [x (clojure.lang.Associative t/Any t/Any) (t/IFn [t/Any -> t/Any]) -> x]
+                          [x (clojure.lang.Associative t/Any t/Any) (t/IFn [t/Any -> t/Any]) t/Any -> x])))
 (defn reduce-in
   "Reduce a value inside an associative datastructure. `more` can be either
   a reducing function, a reducting function and an initial value."

                        (remove f coll))) m ks nil))

(t/ann some-in (t/All [x]
                 (t/IFn [x (t/Vec t/Any) (t/IFn [t/Any -> t/Any]) -> x])))
(defn some-in
  [m ks f]
  (fn-in (fn [coll _] (if (vector? coll)

                                  [Float -> Float]
                                  [Integer -> Integer]
                                  [Long -> Long]))
(t/ann chebyshev-distance [Pos Pos -> Long])
(defn chebyshev-distance
  "Chebyshev/chessboard distance between 2 points"
  [p1 p2]
  (max (Math/abs (long (- (get p1 :x) (get p2 :x))))
       (Math/abs (long (- (get p1 :y) (get p2 :y))))))

(t/ann distance-sq [Pos Pos -> t/AnyInteger])
(defn distance-sq
