Implicit resolution error in REPR
I've found that I got compilation error in REPR when the splain plugin is enabled:
scala> import shapeless._, me.limansky._, cats.instances.all._
import shapeless._
import me.limansky._
import cats.instances.all._
scala> case class Foo(n: Int); case class Bar(s: String, f: Foo)
defined class Foo
defined class Bar
scala> MapReader[Bar].read(Map("s" -> "b", "n" -> "6"))
<console>:25: error: implicit error;
!I ev: MapReader[Bar]
MapReader.genericReader invalid because
!I mapReader: MapReader[R]
Generic.materialize invalid because
type parameters weren't correctly instantiated outside of the implicit tree: inferred type arguments [shapeless.::[String,shapeless.::[Foo,shapeless.HNil]],Nothing] do not conform to method materializeCoproduct's type parameter bounds [V <: shapeless.Coproduct,R <: shapeless.Coproduct]
MapReader[Bar].read(Map("s" -> "b", "n" -> "6"))
The same code without plugin works fine:
scala> import shapeless._, me.limansky._
import shapeless._
import me.limansky._
scala> import shapeless._, me.limansky._, cats.instances.all._
import shapeless._
import me.limansky._
import cats.instances.all._
scala> case class Foo(n: Int); case class Bar(s: String, f: Foo)
defined class Foo
defined class Bar
scala> MapReader[Bar].read(Map("s" -> "b", "n" -> "6"))
res0: Bar = Bar(b,Foo(6))
The code is available in this gist: https://gist.github.com/limansky/7c91a3deaa25fc0ec7339ea191d4a54a
It looks like the problem is reproducible only in REPR, at least the tests are compiled and passed successfully.
does it happen as well if you deactivate the plugin features via -P:splain:all:false?
Yes it does. In this case it doesn't explain the error:
scala> MapReader[Bar].read(Map("s" -> "b", "n" -> "6"))
<console>:25: error: could not find implicit value for parameter ev: me.limansky.MapReader[Bar]
MapReader[Bar].read(Map("s" -> "b", "n" -> "6"))
then it's probably analogous to #4, due to the nature of the reflective hack used to hijack the compiler phases. it's likeley this isn't going to be fixed until I implement parts of the plugin in the compiler itself, which is hopefully soon.