Shapeless中是否存在Int => Option[Nat]
函数?
其类型签名:
intToOptionNat(a: Int): Option[Nat] = ???
示例:
intToOptionNat(5) == Some( Nat(5) )
intToOptionNat(-42) == None
答案 0 :(得分:1)
我认为您正在寻找的功能是将Int
转换为相应的Nat
子类型,其形式为_0
,{ {1}},Succ[_0]
等。
因为我们通常希望在某些后续类型级别计算中利用结果Succ[Succ[_0]]
子类型的结构,所以这需要在编译时静态地知道。因此Nat
类型不够精确......我们需要Int
单例类型。这些不是(setTimeout()
)在Scala中可直接表达的,但是无形的提供了基于宏的隐式转换,用于从Int
字面值计算Nat
,
Int
由于这是静态计算的,因此不需要将结果类型包含在scala> import shapeless.syntax.nat._
import shapeless.syntax.nat._
scala> def intToNat(n: Nat): n.type = n
intToNat: (n: shapeless.Nat)n.type
中...如果参数文字没有Option
表示,它将会是编译时错误,
Nat