For curiosity sake, for those who study Scala, please explain what the hell that implementation of FunctionalCanBuild is:
So, it is possible to create custom Json Writes for a class in play framework, like this:
implicit val locationWrites: Writes[Location] = (
(JsPath \ "lat").write[Double] and
(JsPath \ "long").write[Double]
)(unlift(Location.unapply))
The and is method defined in FunctionalBuilderOps and returns FunctionalBuilder[M]#CanBuild2 which in turn returns FunctionalBuilder[M]#CanBuild3 and so on till FunctionalBuilder[M]#CanBuild22.
So why 22? What if my model has 23 fields? From Scala point of view how to understand this:
fu.fmap[A1 ~ A2, B](canBuild(m1, m2), { case a1 ~ a2 => f(a1, a2) })
Why ~ (and where it is defined) called on generics?
I know, this question may look bit complicated, but stackoverflow is the only hope I have, no googling no scala docs help to understand.