       z
       (recur (right z)))))
 
-(def leftmost start)
-(def rightmost end)
+(def leftmost "Alias for start." start)
+(def rightmost "Alias for end." end)
 
 (defn' lefts :- DoubleList
   "Get the left side of the zipper."

  [& args :- [Any]]
  (->zip args))

(defn' left :- Zipper
  "Move the zipper to the left."
  [z :- Zipper]
  (if (core/empty? (:left z))

  [z :- Zipper]
  (peek (:left z)))

(defn' remove :- Zipper
  "Remove the current element from the zipper."
  [z :- Zipper]
  (if-not (core/empty? (:left z))
    (-> (update-in z [:left] pop)
        (update-in [:index] dec))
    z))

(defn' replace :- Zipper
  "Replace the current element in the zipper
  with el."
  [z :- Zipper, el :- Any]
  (if-not (core/empty? (:left z))
    (update-in z [:left] #(-> % pop (conj el)))
    z))

(defn' truncate :- Zipper
  "Truncate the right side of the zipper."
  [z :- Zipper]
  (assoc z :right (double-list)))

(defn' update :- Zipper
  "Update the current element in the zipper,
  calling f on it."
  [z :- Zipper, f :- (Fn Any [Any])]
  (if-not (core/empty? (:left z))
    (update-in z [:left] #(let [v (f (peek %))]
                            (-> % pop (conj v))))
    z))

(defn' insert-right :- Zipper
  "Insert el to the right of the current
