Skip to content
TypeTag without scala-reflect
Scala Shell
Branch: master
Clone or download

Latest commit

pshirshov Macro-free boopickle codecs
Macro-free boopickle codecs, copypasted from boopickle trees dump
Latest commit aa431fd Mar 21, 2020

Files

Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
.github/workflows echo build cmd on CI Mar 9, 2020
izumi-reflect Macro-free boopickle codecs Mar 20, 2020
project plain jvm build Mar 9, 2020
.gitattributes initial commit Feb 21, 2020
.gitignore initial commit Feb 21, 2020
.jvmopts initial commit Feb 21, 2020
.scalafmt.conf initial commit Feb 21, 2020
CLA.md add cla (#10) Mar 20, 2020
CODE_OF_CONDUCT.md initial commit Feb 21, 2020
LICENSE initial commit Feb 21, 2020
README.md Update README.md Mar 9, 2020
build.sbt plain jvm build Mar 9, 2020
keys.sh publishing: wip Feb 24, 2020
sbtgen.sc initial commit Feb 21, 2020
secrets.tar.enc publishing: wip Feb 24, 2020
version.sbt Setting version to 0.12.0-SNAPSHOT Mar 9, 2020

README.md

Build

izumi-reflect

@quote: Looks a bit similar to TypeTag

izumi-reflect is a fast, lightweight, portable and efficient alternative for TypeTag from scala-reflect.

izumi-reflect is a lightweight model of Scala type system and provides a simulator of the important parts of the Scala typechecker.

Why izumi-reflect

  1. izumi-reflect compiles faster, runs a lot faster than scala-reflect and is fully immutable and thread-safe,
  2. izumi-reflect supports Scala.js, Scala Native and will support Scala 3 in immediate future,
  3. izumi-reflect allows you to obtain tags for unapplied type constructors (F[_]) and combine them at runtime.

Credits

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 scala-reflect/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

Limitations

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:

  1. Type boundaries support is very limited because of a problematic behavior of Scala 2.13 compiler,
  2. Recursive type bounds (F-bounded types) are not preserved and may produce false positives,
  3. Existential types written with forSome are not supported and may produce unexpected results,
  4. 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

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:

./sbtgen.sc

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
You can’t perform that action at this time.