Int =>选项[纳特]?

时间:2016-08-26 02:30:19

标签: scala shapeless

Shapeless中是否存在Int => Option[Nat]函数?

其类型签名:

intToOptionNat(a: Int): Option[Nat] = ???

示例:

intToOptionNat(5)   == Some( Nat(5) )
intToOptionNat(-42) == None

1 个答案:

答案 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