title: Assoc or update Clojure lists and lazy sequences
body: <p>If I have a vector <code>(def v [1 2 3])</code>, I can replace the first element with <code>(assoc v 0 666)</code>, obtaining <code>[666 2 3]</code></p>
  
  <p>But if I try to do the same after mapping over the vector: </p>
  
  <pre><code>(def v (map inc [1 2 3]))
  (assoc v 0 666)
  </code></pre>
  
  <p>the following exception is thrown:</p>
  
  <pre><code>ClassCastException clojure.lang.LazySeq cannot be cast to clojure.lang.Associative
  </code></pre>
  
  <p>What's the most idiomatic way of editing or updating a single element of a lazy sequence?</p>
  
  <p>Should I use <code>map-indexed</code> and alter only the index 0 or realize the lazy sequence into a vector and then edit it via assoc/update?
  The first has the advantage of maintaining the laziness, while the second is less efficient but maybe more obvious.</p>
  
  <p>I guess for the first element I can also use drop and cons.
  Are there any other ways?  I was not able to find any examples anywhere.</p>