package example
type Rec[A <: Tuple] <: Tuple = A match
case hd *: tl => hd *: Rec[tl]
case EmptyTuple => EmptyTuple
object Rec:
inline def rec[A <: Tuple](a: A): Rec[A] =
inline a match
case b: (hd *: tl) => b.head *: rec(b.tail)
case _: EmptyTuple => EmptyTuple
trait Codec[A]:
def map[B](x: A => B): Codec[B]
object Test:
inline def rec[A <: Tuple](c: Codec[A]): Codec[Rec[A]] =
c.map(x => Rec.rec(x)) // line 18
If I resolve the symbol of tree Rec.rec on line 18, I got a StackOverflowError:
java.lang.StackOverflowError: null
at tastyquery.TypeMaps$TypeMap.mapOver(TypeMaps.scala:110)
at tastyquery.TypeMaps$NormalizingTypeMap.mapOver(TypeMaps.scala:209)
at tastyquery.TypeMaps$TypeMap.mapOver(TypeMaps.scala:90)
at tastyquery.TypeOps$AsSeenFromMap.transform(TypeOps.scala:72)
at tastyquery.TypeMaps$TypeMap.apply(TypeMaps.scala:32)
at tastyquery.TypeMaps$TypeMap.mapOver(TypeMaps.scala:173)
at tastyquery.TypeMaps$TypeMap.mapOver(TypeMaps.scala:91)
at tastyquery.TypeOps$AsSeenFromMap.transform(TypeOps.scala:72)
at tastyquery.TypeMaps$TypeMap.apply(TypeMaps.scala:32)
at tastyquery.TypeMaps$TypeMap.$anonfun$1(TypeMaps.scala:74)
at scala.collection.immutable.List.mapConserve(List.scala:472)
at tastyquery.TypeMaps$TypeMap.mapOverLambda(TypeMaps.scala:74)
at tastyquery.TypeMaps$TypeMap.mapOver(TypeMaps.scala:124)
at tastyquery.TypeMaps$NormalizingTypeMap.mapOver(TypeMaps.scala:209)
at tastyquery.TypeMaps$TypeMap.mapOver(TypeMaps.scala:90)
at tastyquery.TypeOps$AsSeenFromMap.transform(TypeOps.scala:72)
at tastyquery.TypeMaps$TypeMap.apply(TypeMaps.scala:32)
at tastyquery.TypeOps$.asSeenFrom(TypeOps.scala:13)
at tastyquery.Types$Type.asSeenFrom(Types.scala:482)
at tastyquery.Symbols$TypeSymbolWithBounds.default$1$$anonfun$1(Symbols.scala:736)
at tastyquery.Types$TypeBounds.mapBounds(Types.scala:2298)
at tastyquery.Symbols$TypeSymbolWithBounds.default$1(Symbols.scala:736)
at tastyquery.Symbols$TypeSymbolWithBounds.boundsAsSeenFrom(Symbols.scala:764)
at tastyquery.Types$TypeRef.storeSymbol$2(Types.scala:1253)
at tastyquery.Types$TypeRef.resolve(Types.scala:1257)
at tastyquery.Types$TypeRef.ensureResolved(Types.scala:1239)
at tastyquery.Types$TypeRef.optSymbol(Types.scala:1279)
at tastyquery.Types$TypeRef$OfClass$.unapply(Types.scala:1382)
at tastyquery.Types$Type.typeParams(Types.scala:529)
If I resolve the symbol of tree
Rec.rec
on line 18, I got aStackOverflowError
: