title: Clojure's defrecord - how to use it?
body: <p>I'm attempting to create my own immutable datatype/methods with <code>defrecord</code> in Clojure. The goal is to have a datatype that I can create instances of, and then call its methods to return a new copy of itself with mutated variables. Say a and b are vectors. I'd like to update a value in both and return a new copy of the entire structure with those vectors updated. This obviously doesn't compile, I'm just trying to get my ideas across.</p>
  
  <pre><code>(defrecord MyType [a b]
    (constructor [N]
      ; I'd like to build an initial instance, creating a and b as vectors of length N
    ) 
  
    (mutate-and-return [] 
      ; I'd like to mutate (assoc the vectors) and return the new structure, a and b modified
    )
  )
  </code></pre>
  
  <p>I'd like to call the constructor and then the mutator as many times as I'd like (there are other functions that don't mutate, but I don't want to make it more complex for the question).</p>
  
  <p>Alternatively, if this is not idiomatic Clojure, how are you supposed to do something like this?</p>