Skip to content

Commit 18ddd88

Browse files
committed
Fix failure to derive typeclass for large sum types on Scala 3
1 parent 4442270 commit 18ddd88

File tree

1 file changed

+6
-4
lines changed

1 file changed

+6
-4
lines changed

core/src/main/scala/magnolia1/impl.scala

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -184,17 +184,19 @@ trait SealedTraitDerivation:
184184

185185
protected transparent inline def subtypesFromMirror[A, SubtypeTuple <: Tuple](
186186
m: Mirror.SumOf[A],
187-
idx: Int = 0 // no longer used, kept for bincompat
187+
idx: Int = 0, // no longer used, kept for bincompat
188+
result: List[SealedTrait.Subtype[Typeclass, A, _]] = Nil
188189
): List[SealedTrait.Subtype[Typeclass, A, _]] =
189190
inline erasedValue[SubtypeTuple] match
190191
case _: EmptyTuple =>
191-
Nil
192+
result.distinctBy(_.typeInfo).sortBy(_.typeInfo.full)
192193
case _: (s *: tail) =>
193194
val sub = summonFrom {
194195
case mm: Mirror.SumOf[`s`] =>
195196
subtypesFromMirror[A, mm.MirroredElemTypes](
196197
mm.asInstanceOf[m.type],
197-
0
198+
0,
199+
Nil
198200
)
199201
case _ => {
200202
val tc = new SerializableFunction0[Typeclass[s]]:
@@ -221,5 +223,5 @@ trait SealedTraitDerivation:
221223
)
222224
}
223225
}
224-
(sub ::: subtypesFromMirror[A, tail](m, idx + 1)).distinctBy(_.typeInfo).sortBy(_.typeInfo.full)
226+
subtypesFromMirror[A, tail](m, idx + 1, sub ::: result)
225227
end SealedTraitDerivation

0 commit comments

Comments
 (0)