mthaler / replica

Tiny library to create copies of case classes


Build Status Maven Central Scaladoc

replica is tiny library to create copies of case classes with updated values using reflection.

The main use case for this library is a flat class hierachy of case classes extending an abstract base class that defines some common fields. Case class copy methods are generated by the compiler and cannot be accessed from the base class. Replica offers a simple way to update values defined in a base class without writing boilerplate code for each case class.


replica is available from the Maven Central repository. The latest release is 0.0.2 and is built against Scala 2.11.7.

If you use SBT you can include replica in your project with

libraryDependencies += "com.mthaler" %% "replica" % "0.0.2"


import com.mthaler.replica.Replicator

abstract class HasName extends Product {

  def name: String
case class Person(name: String, age: Int) extends HasName
case class Pet(name: String) extends HasName

implicit class RichHasName[T <: HasName](value: T) {
  def withName(name: String) = Replicator.copy(value, Map("name" -> name))

Person("Richard Feynman", 42).withName("Paul Dirac")

The result is Person("Paul Dirac", 42).

##License replica is licensed under APL 2.0.