In "Play for Scala book" Листинг 8.12
import play.api.libs.json._
import play.api.libs.functional.syntax._
implicit val productWrites: Writes[Product] = (
(JsPath \ "ean").write[Long] and
(JsPath \ "name").write[String] and
(JsPath \ "description").write[String]
)(unlift(Product.unapply))
Они объясняют unlift и unapply следующим образом:
Наконец, наш форматер в листинге8.12 использует оператор and для объединения средств форматирования и unlift, чтобы изменить тип возвращаемого значения неприменимой функции на то, что требуется здесь. Детали API для объединения таких форматеров и причина, по которой требуется unlift более сложны , но вы можете смело игнорировать это сейчас.
Так что же делает этот unlift и как он работает?
Я попробовал эту ссылку , но обе не одинаковые unlift