@quote: Looks a bit similar to TypeTag
izumi-reflect is a fast, lightweight, portable and efficient alternative for
izumi-reflect is a lightweight model of Scala type system and provides a simulator of the important parts of the Scala typechecker.
izumi-reflectcompiles faster, runs a lot faster than
scala-reflectand is fully immutable and thread-safe,
izumi-reflectsupports Scala.js, Scala Native and will support Scala 3 in immediate future,
izumi-reflectallows you to obtain tags for unapplied type constructors (
F[_]) and combine them at runtime.
izumi-reflect has been created by 7mind to power Izumi Project,
as a replacement for
TypeTag in reaction to a lack of confirmed information about the future of
TypeTag in Scala 3 (Motivation),
and donated to ZIO.
This repository contains an independent and more conservative copy of the code comparing to Izumi one.
izumi-reflect model of the Scala type system is not 100% precise, but "good enough" for the vast majority of the usecases.
Known limitations are:
- Type boundaries support is very limited because of a problematic behavior of Scala 2.13 compiler,
- Recursive type bounds (F-bounded types) are not preserved and may produce false positives,
- Existential types written with
forSomeare not supported and may produce unexpected results,
- Path-Dependent Types are based on variable names and may cause unexpected results with variables with different names but the same type or vice-versa (vs. Scala typechecker)
build.sbt is generated by sbtgen. During development you may not want to mess with ScalaJS and ScalaNative, you may generate a pure-JVM Scala project:
Once you finished tinkering with the code you may want to generate full project and test it for all the platforms:
./sbtgen.sc --js --native sbt +test