Scala бесформенное неявное разрешение StackruError с ArgonautShapeless

Я использую ArgonautShapeless для определения некоторых кодеков JSON.

Когда я предоставляю тип для моего кодека, я получаю StackruError's, но если я оставляю тип выключенным, он работает. Как я могу предоставить тип?

Мое понимание проблемы заключается в том, что неявный поиск от def of[A: DecodeJson] = implicitly[DecodeJson[A]] находит мое определение в той же строке implicit def fooCodec: DecodeJson[Foo] и, таким образом, является рекурсивным, поэтому ломается.

Есть ли другой способ, который позволит мне предоставить тип? В идеале я хочу иметь один объект в своем проекте, где я определяю все коды, и они могут зависеть друг от друга.

import $ivy.`com.github.alexarchambault::argonaut-shapeless_6.2:1.2.0-M4` 
import argonaut._, Argonaut._ 
case class Foo(a: Int)
object SomeCodecs {
    import ArgonautShapeless._
    // this doesnt work
    implicit def fooCodec: DecodeJson[Foo] = DecodeJson.of[Foo]
 } 
import SomeCodecs._
"""{"a":1}""".decode[Foo]

java.lang.StackruError
  ammonite.$sess.cmd3$SomeCodecs$.fooCodec(cmd3.sc:3)

Это работает, если я оставлю тип выключенным.

object SomeCodecs {
    import ArgonautShapeless._
    // this works
    implicit def fooCodec = DecodeJson.of[Foo]
 } 
import SomeCodecs._
"""{"a":1}""".decode[Foo]
res4: Either[Either[String, (String, CursorHistory)], Foo] = Right(Foo(1))

Спасибо

0 ответов

Другие вопросы по тегам