magnolia icon indicating copy to clipboard operation
magnolia copied to clipboard

Spurious compilation errors

Open OlegYch opened this issue 4 years ago • 5 comments

With typeclass like this

trait MagnoliaFormatSchema[T] extends MagnoliaFormatSchema.Input[T]
object MagnoliaFormatSchema {
  trait Input[T] 
  type Typeclass[T] = MagnoliaFormatSchema[T]
  trait Derived[T] extends Typeclass[T] 

  def combine[T](ctx: CaseClass[Typeclass, T]): Derived[T] = {
    ???
  }

  def dispatch[T](ctx: SealedTrait[Typeclass, T]): Derived[T] = {
    ???
  }

  def gen[T]: Derived[T] = macro Magnolia.gen[T]
}

and case class like this

object ObjectName {
  case class Step(
      tpe: ObjectName.Type.Value,
      code: Step.Id,
      order: Int,
      action: Step.Action.Value,
      name: String,
      auto: Boolean,
      autoCheck: Boolean,
      headline: Option[String],
      rollbackCode: Option[Step.Id],
  )
}

i sometimes get this:

 type mismatch;
[error]  found   : MagnoliaFormatSchema.Typeclass[packagename.ObjectName.Step]
[error]     (which expands to)  MagnoliaFormatSchema[packagename.ObjectName.Step]
[error]  required: MagnoliaFormatSchema.Derived[packagename.ObjectName.Step]
[error]   implicit val zStepFormat                 = MagnoliaFormatSchema.gen[Step]

and sometimes this

[warn] Generated class packagename.ObjectName$$typecreator2$1 differs only in case from packagename.ObjectName$$typecreator2$1.
[warn]   Such classes will overwrite one another on case-insensitive filesystems.

other times it compiles just fine using magnolia 0.16.0 with scala 2.13.2 on windows sorry i can't minimize it properly because it's very spurious

OlegYch avatar May 04 '20 18:05 OlegYch

adding explicit type to zStepFormat seems to sidestep it

OlegYch avatar May 04 '20 18:05 OlegYch

Spurious issue means it's probably cause by caching. And indeed when I think about it, caching assumes Typeclass[T] is the type returned from gen. This kind of usage breaks the assumption and perhaps causes spurious issues.

I'm not sure about the typecreator name clash. Sounds like something specific to ObjectName.Type.Value.

joroKr21 avatar May 04 '20 18:05 joroKr21

i can see in debug output that one of the params is wrapped in 'Deferred' when it fails, like this:

lazy val paramTypeclass$macro$15: MagnoliaFormatSchema.Typeclass[Int] = Deferred.apply[MagnoliaFormatSchema.Typeclass[Int]]("paramTypeclass$macro$3");

it's always an Int instance, and there is another case class in same file for which derivation also fails and it also has an Int field not sure what it means

OlegYch avatar May 05 '20 16:05 OlegYch

Could you post the full tree output by @debug?

joroKr21 avatar May 05 '20 17:05 joroKr21

yep

//ObjectName.scala:338:55: Magnolia macro expansion for packagename.ObjectName.Step
//   implicit val zStepFormat  = MagnoliaFormatSchema.gen[Step]
                                                       ^
 ... = {
   lazy val stepTypeclass$macro$4: packagename.common.schema.MagnoliaFormatSchema.Typeclass[packagename.ObjectName.Step] = {
     val paramTypeclass$macro$6 = packagename.common.schema.MagnoliaFormatSchema.toMagnolia[packagename.ObjectName.Type.Value](packagename.common.schema.MagnoliaSchema.zEnumerationSchema[packagename.ObjectName.Type.type](ObjectName.this.Type.zTypeFormat, (({
       val $u: scala.reflect.runtime.`package`.universe.type = scala.reflect.runtime.`package`.universe;
       val $m: $u.Mirror = scala.reflect.runtime.`package`.universe.runtimeMirror(this.getClass().getClassLoader());
       $u.TypeTag.apply[packagename.ObjectName.Type.type]($m, {
         final class $typecreator1 extends TypeCreator {
           def apply[U <: Universe with Singleton]($m$untyped: Mirror[U]): (U)#Type = {
             val $u: U = $m$untyped.universe;
             val $m: $u.Mirror = $m$untyped.asInstanceOf[$u.Mirror];
             $u.internal.reificationSupport.SingleType($u.internal.reificationSupport.SingleType($u.internal.reificationSupport.ThisType($m.staticPackage("packagename.backoffice.dealing").asModule.moduleClass), $m.staticModule("packagename.ObjectName")), $m.staticModule("packagename.ObjectName.Type"))
           }
         };
         new $typecreator1()
       })
     }): reflect.runtime.universe.TypeTag[packagename.ObjectName.Type.type])), packagename.common.schema.MagnoliaFormat.toMagnolia[packagename.ObjectName.Type.Value](ObjectName.this.Type.zTypeFormat));
     val paramTypeclass$macro$7 = packagename.common.schema.MagnoliaFormatSchema.toMagnolia[packagename.ObjectName.Step.Id](packagename.common.schema.MagnoliaSchema.zDomainIdSchema[packagename.ObjectName.Step]((({
       val $u: scala.reflect.runtime.`package`.universe.type = scala.reflect.runtime.`package`.universe;
       val $m: $u.Mirror = scala.reflect.runtime.`package`.universe.runtimeMirror(this.getClass().getClassLoader());
       $u.TypeTag.apply[packagename.ObjectName.Step]($m, {
         final class $typecreator2 extends TypeCreator {
           def apply[U <: Universe with Singleton]($m$untyped: Mirror[U]): (U)#Type = {
             val $u: U = $m$untyped.universe;
             val $m: $u.Mirror = $m$untyped.asInstanceOf[$u.Mirror];
             $m.staticClass("packagename.ObjectName.Step").asType.toTypeConstructor
           }
         };
         new $typecreator2()
       })
     }): reflect.runtime.universe.TypeTag[packagename.ObjectName.Step])), packagename.common.schema.MagnoliaFormat.toMagnolia[packagename.ObjectName.Step.Id](packagename.common.DomainId._DomainIdFormat[packagename.ObjectName.Step]));
     lazy val paramTypeclass$macro$8: packagename.common.schema.MagnoliaFormatSchema.Typeclass[Int] = Deferred.apply[packagename.common.schema.MagnoliaFormatSchema.Typeclass[Int]]("paramTypeclass$macro$3");
     val paramTypeclass$macro$9 = packagename.common.schema.MagnoliaFormatSchema.toMagnolia[packagename.ObjectName.Step.Action.Value](packagename.common.schema.MagnoliaSchema.zEnumerationSchema[packagename.ObjectName.Step.Action.type](Step.this.Action.zActionFormat, (({
       val $u: scala.reflect.runtime.`package`.universe.type = scala.reflect.runtime.`package`.universe;
       val $m: $u.Mirror = scala.reflect.runtime.`package`.universe.runtimeMirror(this.getClass().getClassLoader());
       $u.TypeTag.apply[packagename.ObjectName.Step.Action.type]($m, {
         final class $typecreator3 extends TypeCreator {
           def apply[U <: Universe with Singleton]($m$untyped: Mirror[U]): (U)#Type = {
             val $u: U = $m$untyped.universe;
             val $m: $u.Mirror = $m$untyped.asInstanceOf[$u.Mirror];
             $u.internal.reificationSupport.SingleType($u.internal.reificationSupport.SingleType($u.internal.reificationSupport.ThisType($m.staticModule("packagename.ObjectName").asModule.moduleClass), $m.staticModule("packagename.ObjectName.Step")), $m.staticModule("packagename.ObjectName.Step.Action"))
           }
         };
         new $typecreator3()
       })
     }): reflect.runtime.universe.TypeTag[packagename.ObjectName.Step.Action.type])), packagename.common.schema.MagnoliaFormat.toMagnolia[packagename.ObjectName.Step.Action.Value](Step.this.Action.zActionFormat));
     val paramTypeclass$macro$10 = packagename.common.schema.MagnoliaFormatSchema.toMagnolia[String](packagename.common.schema.MagnoliaSchema.toMagnolia[String](packagename.common.schema.Openapi.defaultStringJsonSchema), packagename.common.schema.MagnoliaFormat.toMagnolia[String](play.api.libs.json.Format.GenericFormat[String](play.api.libs.json.Reads.StringReads, play.api.libs.json.Writes.StringWrites)));
     val paramTypeclass$macro$11 = packagename.common.schema.MagnoliaFormatSchema.toMagnolia[Boolean](packagename.common.schema.MagnoliaSchema.toMagnolia[Boolean](packagename.common.schema.Openapi.booleanJsonSchema), packagename.common.schema.MagnoliaFormat.toMagnolia[Boolean](play.api.libs.json.Format.GenericFormat[Boolean](play.api.libs.json.Reads.BooleanReads, play.api.libs.json.Writes.BooleanWrites)));
     ();
     val paramTypeclass$macro$12 = packagename.common.schema.MagnoliaFormatSchema.toMagnolia[Option[String]](packagename.common.schema.MagnoliaSchema.toMagnoliaOption[String](packagename.common.schema.MagnoliaSchema.toMagnolia[String](packagename.common.schema.Openapi.defaultStringJsonSchema)), packagename.common.schema.MagnoliaFormat.toMagnoliaOption[String](packagename.common.schema.MagnoliaReads.toMagnoliaOption[String](packagename.common.schema.MagnoliaReads.toMagnolia[String](play.api.libs.json.Reads.StringReads)), play.api.libs.json.Writes.OptionWrites[String](play.api.libs.json.Writes.StringWrites)));
     val paramTypeclass$macro$13 = packagename.common.schema.MagnoliaFormatSchema.toMagnolia[Option[packagename.ObjectName.Step.Id]](packagename.common.schema.MagnoliaSchema.toMagnoliaOption[packagename.ObjectName.Step.Id](packagename.common.schema.MagnoliaSchema.zDomainIdSchema[packagename.ObjectName.Step]((({
       val $u: scala.reflect.runtime.`package`.universe.type = scala.reflect.runtime.`package`.universe;
       val $m: $u.Mirror = scala.reflect.runtime.`package`.universe.runtimeMirror(this.getClass().getClassLoader());
       $u.TypeTag.apply[packagename.ObjectName.Step]($m, {
         final class $typecreator5 extends TypeCreator {
           def apply[U <: Universe with Singleton]($m$untyped: Mirror[U]): (U)#Type = {
             val $u: U = $m$untyped.universe;
             val $m: $u.Mirror = $m$untyped.asInstanceOf[$u.Mirror];
             $m.staticClass("packagename.ObjectName.Step").asType.toTypeConstructor
           }
         };
         new $typecreator5()
       })
     }): reflect.runtime.universe.TypeTag[packagename.ObjectName.Step]))), packagename.common.schema.MagnoliaFormat.toMagnoliaOption[packagename.ObjectName.Step.Id](packagename.common.schema.MagnoliaReads.toMagnoliaOption[packagename.ObjectName.Step.Id](packagename.common.schema.MagnoliaReads.toMagnolia[packagename.ObjectName.Step.Id](packagename.common.DomainId._DomainIdFormat[packagename.ObjectName.Step])), play.api.libs.json.Writes.OptionWrites[packagename.ObjectName.Step.Id](packagename.common.DomainId._DomainIdFormat[packagename.ObjectName.Step])));
     val parameters$macro$14: scala.Array[magnolia.Param[packagename.common.schema.MagnoliaFormatSchema.Typeclass, packagename.ObjectName.Step]] = new scala.Array(9);
     parameters$macro$14.update(0, magnolia.Param.apply[packagename.common.schema.MagnoliaFormatSchema.Typeclass, packagename.ObjectName.Step, packagename.ObjectName.Type.Value]("tpe", 0, false, magnolia.CallByNeed(paramTypeclass$macro$6), magnolia.CallByNeed(scala.None), scala.Array()));
     parameters$macro$14.update(1, magnolia.Param.apply[packagename.common.schema.MagnoliaFormatSchema.Typeclass, packagename.ObjectName.Step, packagename.ObjectName.Step.Id]("code", 1, false, magnolia.CallByNeed(paramTypeclass$macro$7), magnolia.CallByNeed(scala.None), scala.Array()));
     parameters$macro$14.update(2, magnolia.Param.apply[packagename.common.schema.MagnoliaFormatSchema.Typeclass, packagename.ObjectName.Step, Int]("order", 2, false, magnolia.CallByNeed(paramTypeclass$macro$8), magnolia.CallByNeed(scala.None), scala.Array()));
     parameters$macro$14.update(3, magnolia.Param.apply[packagename.common.schema.MagnoliaFormatSchema.Typeclass, packagename.ObjectName.Step, packagename.ObjectName.Step.Action.Value]("action", 3, false, magnolia.CallByNeed(paramTypeclass$macro$9), magnolia.CallByNeed(scala.None), scala.Array()));
     parameters$macro$14.update(4, magnolia.Param.apply[packagename.common.schema.MagnoliaFormatSchema.Typeclass, packagename.ObjectName.Step, String]("name", 4, false, magnolia.CallByNeed(paramTypeclass$macro$10), magnolia.CallByNeed(scala.None), scala.Array()));
     parameters$macro$14.update(5, magnolia.Param.apply[packagename.common.schema.MagnoliaFormatSchema.Typeclass, packagename.ObjectName.Step, Boolean]("auto", 5, false, magnolia.CallByNeed(paramTypeclass$macro$11), magnolia.CallByNeed(scala.None), scala.Array()));
     parameters$macro$14.update(6, magnolia.Param.apply[packagename.common.schema.MagnoliaFormatSchema.Typeclass, packagename.ObjectName.Step, Boolean]("autoCheck", 6, false, magnolia.CallByNeed(paramTypeclass$macro$11), magnolia.CallByNeed(scala.None), scala.Array()));
     parameters$macro$14.update(7, magnolia.Param.apply[packagename.common.schema.MagnoliaFormatSchema.Typeclass, packagename.ObjectName.Step, Option[String]]("headline", 7, false, magnolia.CallByNeed(paramTypeclass$macro$12), magnolia.CallByNeed(scala.None), scala.Array()));
     parameters$macro$14.update(8, magnolia.Param.apply[packagename.common.schema.MagnoliaFormatSchema.Typeclass, packagename.ObjectName.Step, Option[packagename.ObjectName.Step.Id]]("rollbackCode", 8, false, magnolia.CallByNeed(paramTypeclass$macro$13), magnolia.CallByNeed(scala.None), scala.Array()));
     val typeName$macro$5 = magnolia.TypeName("packagename.ObjectName", "Step", scala.collection.immutable.List());
     packagename.common.schema.MagnoliaFormatSchema.combine({
       final class $anon extends magnolia.CaseClass[packagename.common.schema.MagnoliaFormatSchema.Typeclass, packagename.ObjectName.Step](typeName$macro$5, false, false, parameters$macro$14, scala.Array()) {
         override def construct[Return](makeParam: _root_.scala.Function1[magnolia.Param[packagename.common.schema.MagnoliaFormatSchema.Typeclass, packagename.ObjectName.Step], Return]): packagename.ObjectName.Step = new packagename.ObjectName.Step(makeParam(parameters$macro$14(0)).asInstanceOf[packagename.ObjectName.Type.Value], makeParam(parameters$macro$14(1)).asInstanceOf[packagename.ObjectName.Step.Id], makeParam(parameters$macro$14(2)).asInstanceOf[Int], makeParam(parameters$macro$14(3)).asInstanceOf[packagename.ObjectName.Step.Action.Value], makeParam(parameters$macro$14(4)).asInstanceOf[String], makeParam(parameters$macro$14(5)).asInstanceOf[Boolean], makeParam(parameters$macro$14(6)).asInstanceOf[Boolean], makeParam(parameters$macro$14(7)).asInstanceOf[Option[String]], makeParam(parameters$macro$14(8)).asInstanceOf[Option[packagename.ObjectName.Step.Id]]);
         def constructMonadic[F$macro$15[_], Return](makeParam: _root_.scala.Function1[magnolia.Param[packagename.common.schema.MagnoliaFormatSchema.Typeclass, packagename.ObjectName.Step], F$macro$15[Return]])(implicit monadic: _root_.mercator.Monadic[F$macro$15]): F$macro$15[packagename.ObjectName.Step] = new _root_.mercator.Ops(makeParam(parameters$macro$14(0)).asInstanceOf[F$macro$15[packagename.ObjectName.Type.Value]]).flatMap(((p0) => new _root_.mercator.Ops(makeParam(parameters$macro$14(1)).asInstanceOf[F$macro$15[packagename.ObjectName.Step.Id]]).flatMap(((p1) => new _root_.mercator.Ops(makeParam(parameters$macro$14(2)).asInstanceOf[F$macro$15[Int]]).flatMap(((p2) => new _root_.mercator.Ops(makeParam(parameters$macro$14(3)).asInstanceOf[F$macro$15[packagename.ObjectName.Step.Action.Value]]).flatMap(((p3) => new _root_.mercator.Ops(makeParam(parameters$macro$14(4)).asInstanceOf[F$macro$15[String]]).flatMap(((p4) => new _root_.mercator.Ops(makeParam(parameters$macro$14(5)).asInstanceOf[F$macro$15[Boolean]]).flatMap(((p5) => new _root_.mercator.Ops(makeParam(parameters$macro$14(6)).asInstanceOf[F$macro$15[Boolean]]).flatMap(((p6) => new _root_.mercator.Ops(makeParam(parameters$macro$14(7)).asInstanceOf[F$macro$15[Option[String]]]).flatMap(((p7) => new _root_.mercator.Ops(makeParam(parameters$macro$14(8)).asInstanceOf[F$macro$15[Option[packagename.ObjectName.Step.Id]]]).map(((p8) => new packagename.ObjectName.Step(p0, p1, p2, p3, p4, p5, p6, p7, p8)))))))))))))))))));
         def constructEither[Err, PType](makeParam: _root_.scala.Function1[magnolia.Param[packagename.common.schema.MagnoliaFormatSchema.Typeclass, packagename.ObjectName.Step], scala.Either[Err, PType]]): scala.Either[scala.List[Err], packagename.ObjectName.Step] = {
           val p0 = makeParam(parameters$macro$14(0)).asInstanceOf[scala.Either[Err, packagename.ObjectName.Type.Value]];
           val p1 = makeParam(parameters$macro$14(1)).asInstanceOf[scala.Either[Err, packagename.ObjectName.Step.Id]];
           val p2 = makeParam(parameters$macro$14(2)).asInstanceOf[scala.Either[Err, Int]];
           val p3 = makeParam(parameters$macro$14(3)).asInstanceOf[scala.Either[Err, packagename.ObjectName.Step.Action.Value]];
           val p4 = makeParam(parameters$macro$14(4)).asInstanceOf[scala.Either[Err, String]];
           val p5 = makeParam(parameters$macro$14(5)).asInstanceOf[scala.Either[Err, Boolean]];
           val p6 = makeParam(parameters$macro$14(6)).asInstanceOf[scala.Either[Err, Boolean]];
           val p7 = makeParam(parameters$macro$14(7)).asInstanceOf[scala.Either[Err, Option[String]]];
           val p8 = makeParam(parameters$macro$14(8)).asInstanceOf[scala.Either[Err, Option[packagename.ObjectName.Step.Id]]];
           scala.Tuple9(p0, p1, p2, p3, p4, p5, p6, p7, p8) match {
             case scala.Tuple9(scala.Right((v0 @ _)), scala.Right((v1 @ _)), scala.Right((v2 @ _)), scala.Right((v3 @ _)), scala.Right((v4 @ _)), scala.Right((v5 @ _)), scala.Right((v6 @ _)), scala.Right((v7 @ _)), scala.Right((v8 @ _))) => _root_.scala.Right(new packagename.ObjectName.Step(v0, v1, v2, v3, v4, v5, v6, v7, v8))
             case _ => _root_.scala.Left(magnolia.MagnoliaUtil.keepLeft(p0, p1, p2, p3, p4, p5, p6, p7, p8))
           }
         };
         def rawConstruct(fieldValues: scala.Seq[scala.Any]): packagename.ObjectName.Step = {
           magnolia.MagnoliaUtil.checkParamLengths(fieldValues, parameters$macro$14.length, typeName$macro$5.full);
           new packagename.ObjectName.Step(fieldValues(0).asInstanceOf[packagename.ObjectName.Type.Value], fieldValues(1).asInstanceOf[packagename.ObjectName.Step.Id], fieldValues(2).asInstanceOf[Int], fieldValues(3).asInstanceOf[packagename.ObjectName.Step.Action.Value], fieldValues(4).asInstanceOf[String], fieldValues(5).asInstanceOf[Boolean], fieldValues(6).asInstanceOf[Boolean], fieldValues(7).asInstanceOf[Option[String]], fieldValues(8).asInstanceOf[Option[packagename.ObjectName.Step.Id]])
         }
       };
       new $anon()
     })
   };
   stepTypeclass$macro$4
 }

//[error]ObjectName.scala:338:55: type mismatch;
//[error]  found   : packagename.common.schema.MagnoliaFormatSchema.Typeclass[packagename.ObjectName.Step]
//[error]     (which expands to)  packagename.common.schema.MagnoliaFormatSchema[packagename.ObjectName.Step]
//[error]  required: packagename.common.schema.MagnoliaFormatSchema.Derived[packagename.ObjectName.Step]
//[error]  Note: implicit value zObjectNameBarListFormat is not applicable here because it comes after the application point and it lacks an explicit result type
//[error]   implicit val zStepFormat  = MagnoliaFormatSchema.gen[Step]
//[error]                                                       ^
// packagename.common.schema.MagnoliaFormatSchema.Typeclass[packagename.ObjectName.Step] <: packagename.common.schema.MagnoliaFormatSchema.Derived[packagename.ObjectName.Step]?
// false
//ObjectName.scala:345:69: Magnolia macro expansion for packagename.ObjectName.BarList
   implicit val zObjectNameBarListFormat = MagnoliaFormatSchema.gen[BarList]
                                                                     ^
 ... = {
   val barlistTypeclass$macro$1 = {
     val paramTypeclass$macro$3 = packagename.common.schema.MagnoliaFormatSchema.toMagnolia[Int](packagename.common.schema.MagnoliaSchema.toMagnolia[Int](packagename.common.schema.Openapi.intJsonSchema), packagename.common.schema.MagnoliaFormat.toMagnolia[Int](play.api.libs.json.Format.GenericFormat[Int](play.api.libs.json.Reads.IntReads, play.api.libs.json.Writes.IntWrites)));
     val paramTypeclass$macro$16 = packagename.common.schema.MagnoliaFormatSchema.toMagnolia[packagename.ObjectName.Id](packagename.common.schema.MagnoliaSchema.zDomainIdSchema[packagename.ObjectName]((({
       val $u: scala.reflect.runtime.`package`.universe.type = scala.reflect.runtime.`package`.universe;
       val $m: $u.Mirror = scala.reflect.runtime.`package`.universe.runtimeMirror(this.getClass().getClassLoader());
       $u.TypeTag.apply[packagename.ObjectName]($m, {
         final class $typecreator7 extends TypeCreator {
           def apply[U <: Universe with Singleton]($m$untyped: Mirror[U]): (U)#Type = {
             val $u: U = $m$untyped.universe;
             val $m: $u.Mirror = $m$untyped.asInstanceOf[$u.Mirror];
             $m.staticClass("packagename.ObjectName").asType.toTypeConstructor
           }
         };
         new $typecreator7()
       })
     }): reflect.runtime.universe.TypeTag[packagename.ObjectName])), packagename.common.schema.MagnoliaFormat.toMagnolia[packagename.ObjectName.Id](packagename.common.DomainId._DomainIdFormat[packagename.ObjectName]));
     val parameters$macro$17: scala.Array[magnolia.Param[packagename.common.schema.MagnoliaFormatSchema.Typeclass, packagename.ObjectName.BarList]] = new scala.Array(2);
     parameters$macro$17.update(0, magnolia.Param.apply[packagename.common.schema.MagnoliaFormatSchema.Typeclass, packagename.ObjectName.BarList, Int]("lineNumber", 0, false, magnolia.CallByNeed(paramTypeclass$macro$3), magnolia.CallByNeed(scala.None), scala.Array()));
     parameters$macro$17.update(1, magnolia.Param.apply[packagename.common.schema.MagnoliaFormatSchema.Typeclass, packagename.ObjectName.BarList, packagename.ObjectName.Id]("tradeCode", 1, false, magnolia.CallByNeed(paramTypeclass$macro$16), magnolia.CallByNeed(scala.None), scala.Array()));
     val typeName$macro$2 = magnolia.TypeName("packagename.ObjectName", "BarList", scala.collection.immutable.List());
     packagename.common.schema.MagnoliaFormatSchema.combine({
       final class $anon extends magnolia.CaseClass[packagename.common.schema.MagnoliaFormatSchema.Typeclass, packagename.ObjectName.BarList](typeName$macro$2, false, false, parameters$macro$17, scala.Array()) {
         override def construct[Return](makeParam: _root_.scala.Function1[magnolia.Param[packagename.common.schema.MagnoliaFormatSchema.Typeclass, packagename.ObjectName.BarList], Return]): packagename.ObjectName.BarList = new packagename.ObjectName.BarList(makeParam(parameters$macro$17(0)).asInstanceOf[Int], makeParam(parameters$macro$17(1)).asInstanceOf[packagename.ObjectName.Id]);
         def constructMonadic[F$macro$18[_], Return](makeParam: _root_.scala.Function1[magnolia.Param[packagename.common.schema.MagnoliaFormatSchema.Typeclass, packagename.ObjectName.BarList], F$macro$18[Return]])(implicit monadic: _root_.mercator.Monadic[F$macro$18]): F$macro$18[packagename.ObjectName.BarList] = new _root_.mercator.Ops(makeParam(parameters$macro$17(0)).asInstanceOf[F$macro$18[Int]]).flatMap(((p0) => new _root_.mercator.Ops(makeParam(parameters$macro$17(1)).asInstanceOf[F$macro$18[packagename.ObjectName.Id]]).map(((p1) => new packagename.ObjectName.BarList(p0, p1)))));
         def constructEither[Err, PType](makeParam: _root_.scala.Function1[magnolia.Param[packagename.common.schema.MagnoliaFormatSchema.Typeclass, packagename.ObjectName.BarList], scala.Either[Err, PType]]): scala.Either[scala.List[Err], packagename.ObjectName.BarList] = {
           val p0 = makeParam(parameters$macro$17(0)).asInstanceOf[scala.Either[Err, Int]];
           val p1 = makeParam(parameters$macro$17(1)).asInstanceOf[scala.Either[Err, packagename.ObjectName.Id]];
           scala.Tuple2(p0, p1) match {
             case scala.Tuple2(scala.Right((v0 @ _)), scala.Right((v1 @ _))) => _root_.scala.Right(new packagename.ObjectName.BarList(v0, v1))
             case _ => _root_.scala.Left(magnolia.MagnoliaUtil.keepLeft(p0, p1))
           }
         };
         def rawConstruct(fieldValues: scala.Seq[scala.Any]): packagename.ObjectName.BarList = {
           magnolia.MagnoliaUtil.checkParamLengths(fieldValues, parameters$macro$17.length, typeName$macro$2.full);
           new packagename.ObjectName.BarList(fieldValues(0).asInstanceOf[Int], fieldValues(1).asInstanceOf[packagename.ObjectName.Id])
         }
       };
       new $anon()
     })
   };
   barlistTypeclass$macro$1
 }

OlegYch avatar May 05 '20 18:05 OlegYch