Good question! The reason you cannot use mapis because Writesit is not a functor.
Writes[A] - A => JsValue. , A => JsValue A => B. - , B => JsValue - .
Reads[A], , JsValue => A - map, A => B, Reads[A]/JsValue => A, a Reads[B]/JsValue => B.
Writes, , , , Play . F - , F[A] contramap[B](f: B => A) map[B](f: A => B). :
case class People(names: Set[Int])
import play.api.libs.json._
import play.api.libs.functional.syntax._
implicit val PeopleWrites: Writes[People] =
(__ \ 'names).write[Set[Int]].contramap(_.names)
(__ \ 'names).write[Set[Int]] Writes[Set[Int]], (_.names) - People => Set[Int]. contramap Writes[People].