Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Cannot Use a Mirror Summoned via summonExpr #7853

Closed
deusaquilus opened this issue Dec 26, 2019 · 10 comments
Closed

Cannot Use a Mirror Summoned via summonExpr #7853

deusaquilus opened this issue Dec 26, 2019 · 10 comments
Assignees

Comments

@deusaquilus
Copy link
Contributor

minimized code

Let's say I have a simple json encoder, for the sake of example it can be any kind of encoder that uses derived.

package derivation
import scala.deriving._
import scala.compiletime.erasedValue

trait JsonEncoder[T] {
  def encode(elem: T): String
}

object JsonEncoder {
  import scala.compiletime.{erasedValue, summonFrom}
  import compiletime._
  import scala.deriving._

  inline def encodeElem[T](elem: T): String = summonFrom {
    case encoder: JsonEncoder[T] => encoder.encode(elem)
  }

  inline def encodeElems[Elems <: Tuple](idx: Int)(value: Any): List[String] =
    inline erasedValue[Elems] match {
      case _: (elem *: elems1) => 
        encodeElem[elem](productElement[elem](value, idx)) :: encodeElems[elems1](idx + 1)(value)
      case _ => Nil
    }

  inline def derived[T](implicit ev: Mirror.Of[T]): JsonEncoder[T] = new JsonEncoder[T] {
    def encode(value: T): String = 
      inline ev match {
        case m: Mirror.SumOf[T] =>
          "not supporting this case yet"
        case m: Mirror.ProductOf[T] =>
          val elems = encodeElems[m.MirroredElemTypes](0)(value)
          val labels = value.asInstanceOf[Product].productElementNames
          val keyValues = labels.zip(elems).map((k, v) => s"$k: $v")
          "{" + (keyValues).mkString(", ") + "}"
        case other =>
          throw new RuntimeException("mirror was an invalid value: " + other)
      }
  }

  given listEncoder[T]: (encoder: JsonEncoder[T]) => JsonEncoder[List[T]] {
    def encode(list: List[T]) = s"[${ list.map(v => encoder.encode(v)).mkString(", ") }]"
  }

  given intEncoder: JsonEncoder[Int] {
    def encode(value: Int) = value + ""
  }

  given stringEncoder: JsonEncoder[String] {
    def encode(value: String) = value
  }
}

Now, inside of a macro, I want to be able to take an abitrary type, summon the mirror for it, and then use the encoder.

package derivation

import scala.deriving._
import scala.quoted._
import scala.quoted.matching._
import scala.compiletime.{erasedValue, summonFrom}

object SummonJsonEncoderTest {

  inline def encodeAndMessAroundType[T](value: =>T): String = ${ encodeAndMessAroundTypeImpl('value) }
  def encodeAndMessAroundTypeImpl[T: Type](value: Expr[T])(given qctx: QuoteContext): Expr[String] = {
    import qctx.tasty._
    val mirrorExpr = summonExpr[Mirror.Of[T]] match {
      case Some(mirror) => mirror
    }

    '{
      given JsonEncoder[T] = JsonEncoder.derived($mirrorExpr)
      val encoder = summon[JsonEncoder[T]]
      encoder.encode($value)
    }
  }

Then let's say I use this in some "client-facing" code:

package derivation
case class PersonSimple(name:String, age:Int)
object SummonTest {
  val stuff = PersonSimple("Joe", 123)
  def main(args: Array[String]):Unit = {
    println( SummonJsonEncoderTest.encodeAndMessAroundType(stuff) )
  }
}

expectation

The above code should work. Instead, it causes the error:

[error]    # 282684 of class dotty.tools.dotc.ast.Trees$Typed in /home/alexander/git/dotty/dotty_test/src/main/scala/derivation/SummonJsonEncoderTest.scala
[error]         at dotty.DottyPredef$.assertFail(DottyPredef.scala:17)
[error]         at dotty.tools.dotc.typer.Typer$.assertPositioned(Typer.scala:60)
[error]         at dotty.tools.dotc.typer.Typer.typed(Typer.scala:2209)
[error]         at dotty.tools.dotc.typer.Typer.typed(Typer.scala:2225)
[error]         at dotty.tools.dotc.typer.Typer.typedExpr(Typer.scala:2333)
[error]         at dotty.tools.dotc.transform.Erasure$Typer.typedTypeApply(Erasure.scala:537)
[error]         at dotty.tools.dotc.typer.Typer.typedUnnamed$1(Typer.scala:2137)
[error]         at dotty.tools.dotc.typer.Typer.typedUnadapted(Typer.scala:2177)
[error]         at dotty.tools.dotc.typer.ReTyper.typedUnadapted(ReTyper.scala:123)
[error]         at dotty.tools.dotc.typer.Typer.typed(Typer.scala:2213)
[error]         at dotty.tools.dotc.typer.Typer.typed(Typer.scala:2225)
[error]         at dotty.tools.dotc.typer.Typer.typedInlined(Typer.scala:1342)
[error]         at dotty.tools.dotc.transform.Erasure$Typer.typedInlined(Erasure.scala:595)
[error]         at dotty.tools.dotc.typer.Typer.typedUnnamed$1(Typer.scala:2140)
[error]         at dotty.tools.dotc.typer.Typer.typedUnadapted(Typer.scala:2177)
[error]         at dotty.tools.dotc.typer.ReTyper.typedUnadapted(ReTyper.scala:123)
[error]         at dotty.tools.dotc.typer.Typer.typed(Typer.scala:2213)
[error]         at dotty.tools.dotc.typer.Typer.typed(Typer.scala:2225)
[error]         at dotty.tools.dotc.typer.Typer.typedExpr(Typer.scala:2333)
[error]         at dotty.tools.dotc.typer.Typer.typedValDef(Typer.scala:1588)
[error]         at dotty.tools.dotc.transform.Erasure$Typer.typedValDef(Erasure.scala:603)
[error]         at dotty.tools.dotc.typer.Typer.typedNamed$1(Typer.scala:2103)
[error]         at dotty.tools.dotc.typer.Typer.typedUnadapted(Typer.scala:2176)
[error]         at dotty.tools.dotc.typer.ReTyper.typedUnadapted(ReTyper.scala:123)
[error]         at dotty.tools.dotc.typer.Typer.typed(Typer.scala:2213)
[error]         at dotty.tools.dotc.typer.Typer.typed(Typer.scala:2225)
[error]         at dotty.tools.dotc.typer.Typer.traverse$1(Typer.scala:2247)
[error]         at dotty.tools.dotc.typer.Typer.typedStats(Typer.scala:2291)
[error]         at dotty.tools.dotc.transform.Erasure$Typer.typedStats(Erasure.scala:747)
[error]         at dotty.tools.dotc.typer.Typer.typedBlockStats(Typer.scala:785)
[error]         at dotty.tools.dotc.typer.Typer.typedInlined(Typer.scala:1341)
[error]         at dotty.tools.dotc.transform.Erasure$Typer.typedInlined(Erasure.scala:595)
[error]         at dotty.tools.dotc.typer.Typer.typedUnnamed$1(Typer.scala:2140)
[error]         at dotty.tools.dotc.typer.Typer.typedUnadapted(Typer.scala:2177)
[error]         at dotty.tools.dotc.typer.ReTyper.typedUnadapted(ReTyper.scala:123)
[error]         at dotty.tools.dotc.typer.Typer.typed(Typer.scala:2213)
[error]         at dotty.tools.dotc.typer.Typer.typed(Typer.scala:2225)
[error]         at dotty.tools.dotc.typer.Typer.typedExpr(Typer.scala:2333)
[error]         at dotty.tools.dotc.typer.Typer.typedDefDef(Typer.scala:1653)
[error]         at dotty.tools.dotc.transform.Erasure$Typer.typedDefDef(Erasure.scala:635)
[error]         at dotty.tools.dotc.typer.Typer.typedNamed$1(Typer.scala:2106)
[error]         at dotty.tools.dotc.typer.Typer.typedUnadapted(Typer.scala:2176)
[error]         at dotty.tools.dotc.typer.ReTyper.typedUnadapted(ReTyper.scala:123)
[error]         at dotty.tools.dotc.typer.Typer.typed(Typer.scala:2213)
[error]         at dotty.tools.dotc.typer.Typer.typed(Typer.scala:2225)
[error]         at dotty.tools.dotc.typer.Typer.traverse$1(Typer.scala:2247)
[error]         at dotty.tools.dotc.typer.Typer.typedStats(Typer.scala:2291)
[error]         at dotty.tools.dotc.transform.Erasure$Typer.typedStats(Erasure.scala:747)
[error]         at dotty.tools.dotc.typer.Typer.typedBlockStats(Typer.scala:785)
[error]         at dotty.tools.dotc.typer.Typer.typedBlock(Typer.scala:789)
[error]         at dotty.tools.dotc.typer.Typer.typedUnnamed$1(Typer.scala:2127)
[error]         at dotty.tools.dotc.typer.Typer.typedUnadapted(Typer.scala:2177)
[error]         at dotty.tools.dotc.typer.ReTyper.typedUnadapted(ReTyper.scala:123)
[error]         at dotty.tools.dotc.typer.Typer.typed(Typer.scala:2213)
[error]         at dotty.tools.dotc.typer.Typer.typed(Typer.scala:2225)
[error]         at dotty.tools.dotc.typer.Typer.typedInlined(Typer.scala:1342)
[error]         at dotty.tools.dotc.transform.Erasure$Typer.typedInlined(Erasure.scala:595)
[error]         at dotty.tools.dotc.typer.Typer.typedUnnamed$1(Typer.scala:2140)
[error]         at dotty.tools.dotc.typer.Typer.typedUnadapted(Typer.scala:2177)
[error]         at dotty.tools.dotc.typer.ReTyper.typedUnadapted(ReTyper.scala:123)
[error]         at dotty.tools.dotc.typer.Typer.typed(Typer.scala:2213)
[error]         at dotty.tools.dotc.typer.Typer.typed(Typer.scala:2225)
[error]         at dotty.tools.dotc.transform.Erasure$Typer.typedTyped(Erasure.scala:393)
[error]         at dotty.tools.dotc.typer.Typer.typedUnnamed$1(Typer.scala:2124)
[error]         at dotty.tools.dotc.typer.Typer.typedUnadapted(Typer.scala:2177)
[error]         at dotty.tools.dotc.typer.ReTyper.typedUnadapted(ReTyper.scala:123)
[error]         at dotty.tools.dotc.typer.Typer.typed(Typer.scala:2213)
[error]         at dotty.tools.dotc.typer.Typer.typed(Typer.scala:2211)
[error]         at dotty.tools.dotc.typer.Typer.typed(Typer.scala:2225)
[error]         at dotty.tools.dotc.typer.Typer.typedInlined(Typer.scala:1342)
[error]         at dotty.tools.dotc.transform.Erasure$Typer.typedInlined(Erasure.scala:595)
[error]         at dotty.tools.dotc.typer.Typer.typedUnnamed$1(Typer.scala:2140)
[error]         at dotty.tools.dotc.typer.Typer.typedUnadapted(Typer.scala:2177)
[error]         at dotty.tools.dotc.typer.ReTyper.typedUnadapted(ReTyper.scala:123)
[error]         at dotty.tools.dotc.typer.Typer.typed(Typer.scala:2213)
[error]         at dotty.tools.dotc.typer.Typer.typed(Typer.scala:2225)
[error]         at dotty.tools.dotc.typer.Typer.typedExpr(Typer.scala:2333)
[error]         at dotty.tools.dotc.transform.Erasure$Typer.$anonfun$5(Erasure.scala:564)
[error]         at dotty.tools.dotc.core.Decorators$ListDecorator$.zipWithConserve$extension(Decorators.scala:110)
[error]         at dotty.tools.dotc.transform.Erasure$Typer.typedApply(Erasure.scala:564)
[error]         at dotty.tools.dotc.typer.Typer.typedUnnamed$1(Typer.scala:2119)
[error]         at dotty.tools.dotc.typer.Typer.typedUnadapted(Typer.scala:2177)
[error]         at dotty.tools.dotc.typer.ReTyper.typedUnadapted(ReTyper.scala:123)
[error]         at dotty.tools.dotc.typer.Typer.typed(Typer.scala:2213)
[error]         at dotty.tools.dotc.typer.Typer.typed(Typer.scala:2225)
[error]         at dotty.tools.dotc.typer.Typer.typedExpr(Typer.scala:2333)
[error]         at dotty.tools.dotc.typer.Typer.typedBlock(Typer.scala:790)
[error]         at dotty.tools.dotc.typer.Typer.typedUnnamed$1(Typer.scala:2127)
[error]         at dotty.tools.dotc.typer.Typer.typedUnadapted(Typer.scala:2177)
[error]         at dotty.tools.dotc.typer.ReTyper.typedUnadapted(ReTyper.scala:123)
[error]         at dotty.tools.dotc.typer.Typer.typed(Typer.scala:2213)
[error]         at dotty.tools.dotc.typer.Typer.typed(Typer.scala:2225)
[error]         at dotty.tools.dotc.typer.Typer.typedExpr(Typer.scala:2333)
[error]         at dotty.tools.dotc.typer.Typer.typedDefDef(Typer.scala:1653)
[error]         at dotty.tools.dotc.transform.Erasure$Typer.typedDefDef(Erasure.scala:635)
[error]         at dotty.tools.dotc.typer.Typer.typedNamed$1(Typer.scala:2106)
[error]         at dotty.tools.dotc.typer.Typer.typedUnadapted(Typer.scala:2176)
[error]         at dotty.tools.dotc.typer.ReTyper.typedUnadapted(ReTyper.scala:123)
[error]         at dotty.tools.dotc.typer.Typer.typed(Typer.scala:2213)
[error]         at dotty.tools.dotc.typer.Typer.typed(Typer.scala:2225)
[error]         at dotty.tools.dotc.typer.Typer.traverse$1(Typer.scala:2247)
[error]         at dotty.tools.dotc.typer.Typer.typedStats(Typer.scala:2291)
[error]         at dotty.tools.dotc.transform.Erasure$Typer.typedStats(Erasure.scala:747)
[error]         at dotty.tools.dotc.typer.Typer.typedClassDef(Typer.scala:1784)
[error]         at dotty.tools.dotc.typer.Typer.typedNamed$1(Typer.scala:2109)
[error]         at dotty.tools.dotc.typer.Typer.typedUnadapted(Typer.scala:2176)
[error]         at dotty.tools.dotc.typer.ReTyper.typedUnadapted(ReTyper.scala:123)
[error]         at dotty.tools.dotc.typer.Typer.typed(Typer.scala:2213)
[error]         at dotty.tools.dotc.typer.Typer.typed(Typer.scala:2225)
[error]         at dotty.tools.dotc.typer.Typer.traverse$1(Typer.scala:2247)
[error]         at dotty.tools.dotc.typer.Typer.typedStats(Typer.scala:2291)
[error]         at dotty.tools.dotc.transform.Erasure$Typer.typedStats(Erasure.scala:747)
[error]         at dotty.tools.dotc.typer.Typer.typedPackageDef(Typer.scala:1910)
[error]         at dotty.tools.dotc.typer.Typer.typedUnnamed$1(Typer.scala:2150)
[error]         at dotty.tools.dotc.typer.Typer.typedUnadapted(Typer.scala:2177)
[error]         at dotty.tools.dotc.typer.ReTyper.typedUnadapted(ReTyper.scala:123)
[error]         at dotty.tools.dotc.typer.Typer.typed(Typer.scala:2213)
[error]         at dotty.tools.dotc.typer.Typer.typed(Typer.scala:2225)
[error]         at dotty.tools.dotc.typer.Typer.typedExpr(Typer.scala:2333)
[error]         at dotty.tools.dotc.transform.Erasure.run(Erasure.scala:100)
[error]         at dotty.tools.dotc.core.Phases$Phase.runOn$$anonfun$1(Phases.scala:315)
[error]         at scala.collection.immutable.List.map(List.scala:219)
[error]         at dotty.tools.dotc.core.Phases$Phase.runOn(Phases.scala:316)
[error]         at dotty.tools.dotc.Run.runPhases$4$$anonfun$4(Run.scala:161)
[error]         at dotty.runtime.function.JProcedure1.apply(JProcedure1.java:15)
[error]         at dotty.runtime.function.JProcedure1.apply(JProcedure1.java:10)
[error]         at scala.collection.ArrayOps$.foreach$extension(ArrayOps.scala:1323)
[error]         at dotty.tools.dotc.Run.runPhases$5(Run.scala:171)
[error]         at dotty.tools.dotc.Run.compileUnits$$anonfun$1(Run.scala:179)
[error]         at dotty.runtime.function.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.java:12)
[error]         at dotty.tools.dotc.util.Stats$.maybeMonitored(Stats.scala:65)
[error]         at dotty.tools.dotc.Run.compileUnits(Run.scala:186)
[error]         at dotty.tools.dotc.Run.compileUnits(Run.scala:128)
[error]         at dotty.tools.dotc.Driver.finish$1(Driver.scala:46)
[error]         at dotty.tools.dotc.Driver.doCompile(Driver.scala:49)
[error]         at dotty.tools.dotc.Driver.process(Driver.scala:189)
[error]         at dotty.tools.dotc.Main.process(Main.scala)
[error]         at xsbt.CachedCompilerImpl.run(CachedCompilerImpl.java:69)
[error]         at xsbt.CompilerInterface.run(CompilerInterface.java:41)
[error]         at sun.reflect.GeneratedMethodAccessor9.invoke(Unknown Source)
[error]         at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
[error]         at java.lang.reflect.Method.invoke(Method.java:498)
[error]         at sbt.internal.inc.AnalyzingCompiler.call(AnalyzingCompiler.scala:237)
[error]         at sbt.internal.inc.AnalyzingCompiler.compile(AnalyzingCompiler.scala:111)
[error]         at sbt.internal.inc.AnalyzingCompiler.compile(AnalyzingCompiler.scala:90)
[error]         at sbt.internal.inc.MixedAnalyzingCompiler.$anonfun$compile$3(MixedAnalyzingCompiler.scala:82)
[error]         at scala.runtime.java8.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.java:12)
[error]         at sbt.internal.inc.MixedAnalyzingCompiler.timed(MixedAnalyzingCompiler.scala:133)
[error]         at sbt.internal.inc.MixedAnalyzingCompiler.compileScala$1(MixedAnalyzingCompiler.scala:73)
[error]         at sbt.internal.inc.MixedAnalyzingCompiler.compile(MixedAnalyzingCompiler.scala:116)
[error]         at sbt.internal.inc.IncrementalCompilerImpl.$anonfun$compileInternal$1(IncrementalCompilerImpl.scala:307)
[error]         at sbt.internal.inc.IncrementalCompilerImpl.$anonfun$compileInternal$1$adapted(IncrementalCompilerImpl.scala:307)
[error]         at sbt.internal.inc.Incremental$.doCompile(Incremental.scala:106)
[error]         at sbt.internal.inc.Incremental$.$anonfun$compile$4(Incremental.scala:87)
[error]         at sbt.internal.inc.IncrementalCommon.recompileClasses(IncrementalCommon.scala:116)
[error]         at sbt.internal.inc.IncrementalCommon.cycle(IncrementalCommon.scala:63)
[error]         at sbt.internal.inc.Incremental$.$anonfun$compile$3(Incremental.scala:89)
[error]         at sbt.internal.inc.Incremental$.manageClassfiles(Incremental.scala:134)
[error]         at sbt.internal.inc.Incremental$.compile(Incremental.scala:80)
[error]         at sbt.internal.inc.IncrementalCompile$.apply(Compile.scala:67)
[error]         at sbt.internal.inc.IncrementalCompilerImpl.compileInternal(IncrementalCompilerImpl.scala:311)
[error]         at sbt.internal.inc.IncrementalCompilerImpl.$anonfun$compileIncrementally$1(IncrementalCompilerImpl.scala:269)
[error]         at sbt.internal.inc.IncrementalCompilerImpl.handleCompilationError(IncrementalCompilerImpl.scala:159)
[error]         at sbt.internal.inc.IncrementalCompilerImpl.compileIncrementally(IncrementalCompilerImpl.scala:238)
[error]         at sbt.internal.inc.IncrementalCompilerImpl.compile(IncrementalCompilerImpl.scala:69)
[error]         at sbt.Defaults$.compileIncrementalTaskImpl(Defaults.scala:1549)
[error]         at sbt.Defaults$.$anonfun$compileIncrementalTask$1(Defaults.scala:1523)
[error]         at scala.Function1.$anonfun$compose$1(Function1.scala:44)
[error]         at sbt.internal.util.$tilde$greater.$anonfun$$u2219$1(TypeFunctions.scala:40)
[error]         at sbt.std.Transform$$anon$4.work(System.scala:67)
[error]         at sbt.Execute.$anonfun$submit$2(Execute.scala:269)
[error]         at sbt.internal.util.ErrorHandling$.wideConvert(ErrorHandling.scala:16)
[error]         at sbt.Execute.work(Execute.scala:278)
[error]         at sbt.Execute.$anonfun$submit$1(Execute.scala:269)
[error]         at sbt.ConcurrentRestrictions$$anon$4.$anonfun$submitValid$1(ConcurrentRestrictions.scala:178)
[error]         at sbt.CompletionService$$anon$2.call(CompletionService.scala:37)
[error]         at java.util.concurrent.FutureTask.run(FutureTask.java:266)
[error]         at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
[error]         at java.util.concurrent.FutureTask.run(FutureTask.java:266)
[error]         at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
[error]         at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
[error]         at java.lang.Thread.run(Thread.java:748)
[error] (Compile / compileIncremental) java.lang.AssertionError: assertion failed: position not set for derivation.PersonSimple:
[error]   
[error]     (
[error]       scala.deriving.Mirror{
[error]         MirroredType = derivation.PersonSimple; 
[error]           MirroredMonoType = derivation.PersonSimple
[error]         ; MirroredElemTypes <: Tuple
[error]       }
[error]      & 
[error]       scala.deriving.Mirror.Product{
[error]         MirroredMonoType = derivation.PersonSimple; 
[error]           MirroredType = derivation.PersonSimple
[error]         ; MirroredLabel = ("PersonSimple" : String)
[error]       }
[error]     ){
[error]       MirroredElemTypes = (String, Int); 
[error]         MirroredElemLabels = (("name" : String), ("age" : String))
[error]     }
[error]    # 282684 of class dotty.tools.dotc.ast.Trees$Typed in /home/alexander/git/dotty/dotty_test/src/main/scala/derivation/SummonJsonEncoderTest.scala
[error] Total time: 1 s, completed Dec 26, 2019 5:24:45 PM
@biboudis biboudis self-assigned this Jan 6, 2020
@nicolasstucki
Copy link
Contributor

It looks like it is already fixed on master

liufengyun added a commit that referenced this issue Jan 8, 2020
@deusaquilus
Copy link
Contributor Author

Okay, thanks. Where can I grab the overnight build and try it out?

@deusaquilus
Copy link
Contributor Author

Wait a minute, are you sure this is working I'm running 0.22.0-bin-20200110-842e4c4-NIGHTLY and getting this error:

[error] java.lang.RuntimeException: mirror was an invalid value: <function2>
[error]         at derivation.Test$$anon$1.encode(SummonTest.scala:12)
[error]         at derivation.Test$$anon$1.encode(SummonTest.scala:12)
[error]         at derivation.Test$.main(SummonTest.scala:12)
[error]         at derivation.Test.main(SummonTest.scala)
[error]         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
[error]         at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
[error]         at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
[error]         at java.lang.reflect.Method.invoke(Method.java:498)
[error] Nonzero exit code: 1

@nicolasstucki
Copy link
Contributor

That seems to be another error. Is the code bug free? Is the compiler generating wrong code? Maybe open another issue.

@deusaquilus
Copy link
Contributor Author

I used the same code as found in @liufengyun's posted code here.

@nicolasstucki
Copy link
Contributor

This line should probably be a compile time error.

@nicolasstucki
Copy link
Contributor

Oh, it cannot fin the mirror and then defaults to any implicit it finds. That is where the function2 comes from. Maybe just remove that case.

@deusaquilus
Copy link
Contributor Author

That causes:

[error]    |  cannot reduce inline match with
[error]    |   scrutinee:  {
[error]    |    ev
[error]    |  } : (ev : 
[error]    |    scala.deriving.Mirror{
[error]    |      MirroredType = T; MirroredMonoType = T; MirroredElemTypes <: Tuple
[error]    |    }
[error]    |  )
[error]    |   patterns :  case m @ _:deriving.Mirror.SumOf[T]
[error]    |               case m @ _:deriving.Mirror.ProductOf[T]
[error]    | This location contains code that was inlined from JsonEncoder.scala:28
[error] -- Error: /home/alexander/git/dotty/mirror_test/src/main/scala/org/deusaquilus/Test.scala:11:57 
[error] 11 |    println(SummonJsonEncoderTest.encodeAndMessAroundType(stuff) )

I'll post the exact code to a repo in a second.

@deusaquilus
Copy link
Contributor Author

Here's the exact code:
https://github.com/deusaquilus/mirror_test

@deusaquilus
Copy link
Contributor Author

Please have a look at #7974

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

3 participants