Skip to content

Instantly share code, notes, and snippets.

@4e6
Created August 24, 2014 09:11
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save 4e6/fe4b73a261a7b7458a6c to your computer and use it in GitHub Desktop.
Save 4e6/fe4b73a261a7b7458a6c to your computer and use it in GitHub Desktop.
Scala typeclass example
case class Object1(field: String)
case class Object2(fields: List[String])
trait CanBeMasked[T] {
def mask(o: T, f: String ⇒ String): T
}
object CanBeMasked {
implicit object O1 extends CanBeMasked[Object1] {
def mask(o: Object1, f: String ⇒ String) = o.copy(field = f(o.field))
}
implicit object O2 extends CanBeMasked[Object2] {
def mask(o: Object2, f: String ⇒ String) = o.copy(fields = o.fields.map(f))
}
}
trait MaskHelper {
def masked[T: CanBeMasked](o: T, f: String ⇒ String): T = implicitly[CanBeMasked[T]].mask(o, f)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment