Get type of a “singleton type”

后端 未结 2 888
醉酒成梦
醉酒成梦 2021-02-15 15:47

We can create a literal types via shapeless:

import shapeless.syntax.singleton._
var x = 42.narrow
// x: Int(42) = 42

But how can I operate wit

2条回答
  •  北荒
    北荒 (楼主)
    2021-02-15 16:27

    1) In Typelevel Scala you can write just

    val x: 42 = 42
    
    type Answ = 42
    
    def doSmth(value: 42) = ???
    

    2) In Dotty Scala you can write the same.

    3) In Lightbend Scala (i.e. standard Scala) + Shapeless you can write

    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) = ???
    

    In case 1) build.sbt should be

    scalaOrganization := "org.typelevel"
    scalaVersion := "2.12.3-bin-typelevel-4"
    scalacOptions += "-Yliteral-types"
    

    In case 2) build.sbt should be

    scalaOrganization := "ch.epfl.lamp"
    scalaVersion := "0.3.0-RC2"
    

    and plugins.sbt

    addSbtPlugin("ch.epfl.lamp" % "sbt-dotty" % "0.1.5")
    

    In case 3) build.sbt should be

    scalaOrganization := "org.scala-lang"
    scalaVersion := "2.12.3"
    libraryDependencies += "com.chuusai" %% "shapeless" % "2.3.2"
    

    4) or you can use Typelevel Scala and Shapeless at the same time.

提交回复
热议问题