   If separator is not provided chomp will remove \\n, \\r or \\r\\n from
   the end of s."
   ([^String s]
+   {:pre [(string? s)]
+    :post [(string? %)]}
    (cond
      (.endsWith s "\r\n") (substring s 0 (- (length s) 2))
      (.endsWith s "\r") (substring s 0 (dec (length s)))
      (.endsWith s "\n") (substring s 0 (dec (length s)))
      :else s))
   ([^String s ^String separator]
+   {:pre [(string? s) (string? separator)]
+    :post [(string? %)]}
    (if (.endsWith s separator)
      (substring s 0 (- (length s) (length separator)))
      s)))

  Returns nil if index falls outside the string boundaries or if
  length is negative."
  ([^String s index]
   (slice s index 1))
  ([^String s ^long index length]
   (cond
     (neg? length) nil
     (neg? (+ (superstring.core/length s) index))

  "Pad the end of s with padding, or spaces, until the length of s matches
  width."
  ([^String s width]
   {:pre [(string? s) (integer? width)]
    :post [(string? %)]}
   (pad-right s width " "))
  ([^String s width ^String padding]
   {:pre [(not-empty padding)
