1) 在Typelevel Scala 你可以只写
val x: 42 = 42
type Answ = 42
def doSmth(value: 42) = ???
2) 在Dotty Scala 中,您可以编写相同的代码。
3) 在 Lightbend Scala(即标准 Scala)+ Shapeless 中,您可以编写
import shapeless.Witness
import shapeless.syntax.singleton._
val x: Witness.`42`.T = 42.narrow
type Answ = Witness.`42`.T
def doSmth(value: Witness.`42`.T) = ???
如果是 1) build.sbt 应该是
scalaOrganization := "org.typelevel"
scalaVersion := "2.12.3-bin-typelevel-4"
scalacOptions += "-Yliteral-types"
在情况 2) build.sbt 应该是
scalaOrganization := "ch.epfl.lamp"
scalaVersion := "0.3.0-RC2"
和 plugins.sbt
addSbtPlugin("ch.epfl.lamp" % "sbt-dotty" % "0.1.5")
在情况 3) build.sbt 应该是
scalaOrganization := "org.scala-lang"
scalaVersion := "2.12.3"
libraryDependencies += "com.chuusai" %% "shapeless" % "2.3.2"
4) 或者您可以同时使用 Typelevel Scala 和 Shapeless。