In general you should create a new state instead of modifying the old one.
Copy
You could use copy method like this:
case class Person(name: String, age: Int)
val youngBob = Person("Bob", 15)
val bob = youngBob.copy(age = youngBob.age + 1)
// Person(Bob,16)
scalaz Lens
You could also use Lens:
import scalaz._, Scalaz._
val ageLens = Lens.lensu[Person, Int]( (p, a) => p.copy(age = a), _.age )
val bob = ageLens.mod(_ + 1, youngBob)
// Person(Bob,16)
See Learning scalaz/Lens. There are also other implementations of Lens.
shapeless Lens
For instance you could use shapeless Lens that implemented using macros, so you don't have to create lens manually:
import shapeless._
val ageLens = Lens[Person] >> 1
val bob = ageLens.modify(youngBob)(_ + 1)
// Person(Bob,16)
See examples on github.
See also
There are a lot of Lens implementations. See Boilerplate-free Functional Lenses for Scala and Macrocosm.