title: Alternative to Elm record extension
body: <p>I am trying to migrate a library from Elm 0.15 to 0.16. The record extension mechanism has been removed.</p>
  
  <p><a href="https://github.com/jastice/boxes-and-bubbles" rel="noreferrer">My library</a> offers physics calculations on bodies (represented as record), and uses record extension to allow users to add labels and other metadata about the bodies.</p>
  
  <p>My <a href="https://github.com/jastice/boxes-and-bubbles/blob/c2e082dc694248b9dc5ff5676d1da160d7c59394/src/Example.elm#L36" rel="noreferrer">example code</a> shows this use by adding a label to all the bodies after their creation:</p>
  
  <pre><code>labeledBodies = map (\b -&gt; { b | label = bodyLabel b.restitution b.inverseMass }) someBodies
  </code></pre>
  
  <p>This list of labeled bodies is also passed to the library: </p>
  
  <pre><code>main = Signal.map scene (run labeledBodies tick)
  </code></pre>
  
  <p>What sort of works: hardcoding a <code>meta</code> parameter into the <code>Body</code> like this:</p>
  
  <pre><code>type alias Body a = {
    pos: Vec2, -- reference position (center)
    velocity: Vec2, -- direction and speed
    inverseMass: Float, -- we usually use only inverse mass for calculations
    restitution: Float, -- bounciness factor
    shape: Shape,
    meta: a
  }
  </code></pre>
  
  <p>But this makes the API more clumsy because it forces the helper functions to take an extra parameter. Is there a more elegant way to deal with this change?</p>