title: What is the Scala equivalent to a Java builder pattern?
body: <p>In the work that I do on a day to day in Java, I use builders quite a lot for fluent interfaces, e.g.: <code>new PizzaBuilder(Size.Large).onTopOf(Base.Cheesy).with(Ingredient.Ham).build();</code></p>
  
  <p>With a quick-and-dirty Java approach, each method call mutates the builder instance and returns <code>this</code>. Immutably, it involves more typing, cloning the builder first before modifying it. The build method eventually does the heavy lifting over the builder state.</p>
  
  <p>What's a nice way of achieving the same in Scala?</p>
  
  <p>If I wanted to ensure that <code>onTopOf(base:Base)</code> was called only once, and then subsequently only <code>with(ingredient:Ingredient)</code> and <code>build():Pizza</code> could be called, a-la a directed builder, how would I go about approaching this?</p>