@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,
izumi-reflectis published for Scala 3, you may check port status here (#22),
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)
- At the moment Scala 3 port does not support Path-Dependent Types, and Structural Refinements. This will be fixed in future.
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