izumi-reflect


License

License

GroupId

GroupId

dev.zio
ArtifactId

ArtifactId

izumi-reflect_sjs0.6_2.13
Last Version

Last Version

0.12.0-M0
Release Date

Release Date

Type

Type

jar
Description

Description

izumi-reflect
izumi-reflect
Project URL

Project URL

https://zio.dev
Project Organization

Project Organization

dev.zio
Source Code Management

Source Code Management

https://github.com/zio/izumi-reflect

Download izumi-reflect_sjs0.6_2.13

How to add to project

<!-- https://jarcasting.com/artifacts/dev.zio/izumi-reflect_sjs0.6_2.13/ -->
<dependency>
    <groupId>dev.zio</groupId>
    <artifactId>izumi-reflect_sjs0.6_2.13</artifactId>
    <version>0.12.0-M0</version>
</dependency>
// https://jarcasting.com/artifacts/dev.zio/izumi-reflect_sjs0.6_2.13/
implementation 'dev.zio:izumi-reflect_sjs0.6_2.13:0.12.0-M0'
// https://jarcasting.com/artifacts/dev.zio/izumi-reflect_sjs0.6_2.13/
implementation ("dev.zio:izumi-reflect_sjs0.6_2.13:0.12.0-M0")
'dev.zio:izumi-reflect_sjs0.6_2.13:jar:0.12.0-M0'
<dependency org="dev.zio" name="izumi-reflect_sjs0.6_2.13" rev="0.12.0-M0">
  <artifact name="izumi-reflect_sjs0.6_2.13" type="jar" />
</dependency>
@Grapes(
@Grab(group='dev.zio', module='izumi-reflect_sjs0.6_2.13', version='0.12.0-M0')
)
libraryDependencies += "dev.zio" % "izumi-reflect_sjs0.6_2.13" % "0.12.0-M0"
[dev.zio/izumi-reflect_sjs0.6_2.13 "0.12.0-M0"]

Dependencies

compile (3)

Group / Artifact Type Version
org.scala-lang : scala-library jar 2.13.1
dev.zio : izumi-reflect-thirdparty-boopickle-shaded_sjs0.6_2.13 jar 0.12.0-M0
org.scala-js : scalajs-library_2.13 jar 0.6.29

provided (2)

Group / Artifact Type Version
com.github.ghik : silencer-lib_2.13.1 jar 1.4.4
org.scala-lang : scala-reflect jar 2.13.1

test (2)

Group / Artifact Type Version
org.scala-js : scalajs-test-bridge_2.13 jar 0.6.29
org.scalatest : scalatest_sjs0.6_2.13 jar 3.2.0-M2

Project Modules

There are no modules declared in this project.

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

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
dev.zio

ZIO

ZIO — Real World Functional Programming

Versions

Version
0.12.0-M0
0.11.0-M1
0.11.0-M0