diff --git a/modules/core/src/main/scala-2/doobie/util/GetPlatform.scala b/modules/core/src/main/scala-2/doobie/util/GetPlatform.scala index 0274fe4d4..f543a2965 100644 --- a/modules/core/src/main/scala-2/doobie/util/GetPlatform.scala +++ b/modules/core/src/main/scala-2/doobie/util/GetPlatform.scala @@ -5,21 +5,17 @@ package doobie.util import shapeless._ -import shapeless.ops.hlist.IsHCons trait GetPlatform { - import doobie.util.compat.=:= /** @group Instances */ - implicit def unaryProductGet[A, L <: HList, H, T <: HList]( + implicit def unaryProductGet[A, L <: HList, H]( implicit G: Generic.Aux[A, L], - C: IsHCons.Aux[L, H, T], - H: Lazy[Get[H]], - E: (H :: HNil) =:= L + E: (H :: HNil) =:= L, + H: Lazy[Get[H]] ): MkGet[A] = { - void(C) // C drives inference but is not used directly - val get = H.value.tmap[A](h => G.from(h :: HNil)) + val get = H.value.tmap[A](h => G.from(E.apply(h :: HNil))) MkGet.lift(get) } diff --git a/modules/core/src/main/scala-2/doobie/util/PutPlatform.scala b/modules/core/src/main/scala-2/doobie/util/PutPlatform.scala index 9b946f158..16c28f7fb 100644 --- a/modules/core/src/main/scala-2/doobie/util/PutPlatform.scala +++ b/modules/core/src/main/scala-2/doobie/util/PutPlatform.scala @@ -5,21 +5,17 @@ package doobie.util import shapeless._ -import shapeless.ops.hlist.IsHCons trait PutPlatform { - import doobie.util.compat.=:= /** @group Instances */ - implicit def unaryProductPut[A, L <: HList, H, T <: HList]( + implicit def unaryProductPut[A, H, L <: HList]( implicit G: Generic.Aux[A, L], - C: IsHCons.Aux[L, H, T], - H: Lazy[Put[H]], - E: (H :: HNil) =:= L + E: L =:= (H :: HNil), + H: Lazy[Put[H]] ): MkPut[A] = { - void(E) // E is a necessary constraint but isn't used directly - val put = H.value.contramap[A](a => G.to(a).head) + val put = H.value.contramap[A](a => E.apply(G.to(a)).head) MkPut.lift(put) } diff --git a/modules/core/src/test/scala-2/doobie/util/PutSuitePlatform.scala b/modules/core/src/test/scala-2/doobie/util/PutSuitePlatform.scala index 3237f6bf5..3d8293d26 100644 --- a/modules/core/src/test/scala-2/doobie/util/PutSuitePlatform.scala +++ b/modules/core/src/test/scala-2/doobie/util/PutSuitePlatform.scala @@ -4,31 +4,26 @@ package doobie.util import doobie.testutils.{VoidExtensions, assertContains} +import doobie.testutils.TestClasses.CCAnyVal -object PutSuitePlatform { - final case class Y(x: String) extends AnyVal - final case class P(x: Int) extends AnyVal -} +object PutSuitePlatform {} trait PutSuitePlatform { self: munit.FunSuite => - import PutSuitePlatform._ - test("Put can be auto derived for unary products (AnyVal)") { import doobie.generic.auto._ - Put[Y].void - Put[P].void + Put[CCAnyVal].void } test("Put can be explicitly derived for unary products (AnyVal)") { - Put.derived[Y].void - Put.derived[P].void + Put.derived[CCAnyVal].void } test("Put should not be derived for non-unary products") { import doobie.generic.auto._ import doobie.testutils.TestClasses.{CCIntString, PlainObj} + println(compileErrors("Put[CCIntString]")) assertContains(compileErrors("Put[CCIntString]"), "implicit value") assertContains(compileErrors("Put[(Int, Int)]"), "implicit value") assertContains(compileErrors("Put[PlainObj.type]"), "implicit value") diff --git a/modules/testutils/src/test/scala/doobie/testutils/TestClasses.scala b/modules/testutils/src/test/scala/doobie/testutils/TestClasses.scala index c39e21269..27fe46061 100644 --- a/modules/testutils/src/test/scala/doobie/testutils/TestClasses.scala +++ b/modules/testutils/src/test/scala/doobie/testutils/TestClasses.scala @@ -16,5 +16,7 @@ object TestClasses { case class CCIntString(i: Int, s: String) + case class CCAnyVal(s: String) extends AnyVal + object PlainObj }