 (defn
   ^{:added "0.6.0"}
   shuffle
-  "Create a generator that generates random permutations of `coll`. Shrinks
-  toward the original collection: `coll`. `coll` will be turned into a vector,
-  if it's not already."
+  "Create a generator that generates random permutations of
+  `coll`. Shrinks toward the original collection: `coll`. `coll` will
+  be coerced to a vector."
   [coll]
-  (core/let [index-gen (choose 0 (dec (count coll)))]
-    (fmap #(reduce swap (vec coll) %)
+  (core/let [coll (if (vector? coll) coll (vec coll))
+             index-gen (choose 0 (dec (count coll)))]
+    (fmap #(reduce swap coll %)
           ;; a vector of swap instructions, with count between
           ;; zero and 2 * count. This means that the average number
           ;; of instructions is count, which should provide sufficient

  Examples:

      ;; generate a vector of booleans, but never the empty vector
      (gen/not-empty (gen/vector gen/boolean))
  "
  [gen]
  (assert (generator? gen) "Arg to not-empty must be a generator")
  (such-that core/not-empty gen))

  guarantee that (map key-fn the-vector) will be distinct.

  If the generator cannot or is unlikely to produce enough distinct
  elements, this generator will fail in the same way as `such-that`.

  Available options:

