Das Beispiel aus der Dokumentation schlägt auf Scala 2.11.11 fehl, aber ich kann es erfolgreich auf Scala 2.12.x ausführen
scala> class Thing(val foo: String, val bar: Int)
defined class Thing
scala> implicit val encodeFoo: Encoder[Thing] = new Encoder[Thing] {
| final def apply(a: Thing): Json = Json.obj(
| ("foo", Json.fromString(a.foo)),
| ("bar", Json.fromInt(a.bar))
| )
| }
encodeFoo: io.circe.Encoder[Thing] = $anon$1<strong i="7">@bfe134d</strong>
scala> implicit val decodeFoo: Decoder[Thing] = new Decoder[Thing] {
| final def apply(c: HCursor): Decoder.Result[Thing] =
| for {
| foo <- c.downField("foo").as[String]
| bar <- c.downField("bar").as[Int]
| } yield {
| new Thing(foo, bar)
| }
| }
<console>:17: error: value flatMap is not a member of io.circe.Decoder.Result[String]
foo <- c.downField("foo").as[String]
^
<console>:18: error: value map is not a member of io.circe.Decoder.Result[Int]
bar <- c.downField("bar").as[Int]
habe den gleichen Fehler auf Scala 2.10.6
Ich habe das gleiche Problem auf Scala 2.11 mit der Circe 0.5.2-Version
Ich denke, das Problem ist, dass die Scala 2.11.x entweder nicht über die Karte/FlatMap verfügt, die neuen Methoden werden in der Version 2.12 eingeführt
Um dieses Problem zu lösen, können Sie entweder Katzen verwenden, importieren Sie es einfach:
import cats.syntax.either._
Warum aktualisieren Sie dies nicht im Dokument? neue Benutzer können in diesem Problem stecken bleiben.
@djvulee Das ist durch die Ritzen gerutscht, aber eine PR wäre sehr willkommen.
Hilfreichster Kommentar
Um dieses Problem zu lösen, können Sie entweder Katzen verwenden, importieren Sie es einfach:
import cats.syntax.either._