Scala shapeless implicit resolution StackOverflowError with ArgonautShapeless

187 Views Asked by At

Im using ArgonautShapeless to define some json codecs.

When I provide the type for my codec I get StackOverflowError's but If I leave the type off it works. How can I provide the type?

My understanding of the problem is that the implicit lookup from def of[A: DecodeJson] = implicitly[DecodeJson[A]] finds my definition on the same line implicit def fooCodec: DecodeJson[Foo] and thus is recursive so breaks.

Is there some other way that will allow me to provide the type? Ideally I want to have one object in my project where I define all of the codes and they may depend on each other.

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.StackOverflowError
  ammonite.$sess.cmd3$SomeCodecs$.fooCodec(cmd3.sc:3)

It works if I leave the type off.

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))

Thanks

0

There are 0 best solutions below