基于peano算法的Scala类型级编程
我从年开始学习scala的type-leve编程。 并在Mod中获取错误基于peano算法的Scala类型级编程,scala,generic-programming,type-level-computation,Scala,Generic Programming,Type Level Computation,我从年开始学习scala的type-leve编程。 并在Mod中获取错误 type Mod[A <: Nat, B <: Nat] = A#FoldR[_0, Nat, ModFold[B]] type ModFold[By <: Nat] = Fold[Nat, Nat] { type Wrap[Acc <: Nat] = By#Compare[Acc]#eq type Apply[N <: Nat, Acc <: Nat] = Wrap[S
type Mod[A <: Nat, B <: Nat] = A#FoldR[_0, Nat, ModFold[B]]
type ModFold[By <: Nat] = Fold[Nat, Nat] {
type Wrap[Acc <: Nat] = By#Compare[Acc]#eq
type Apply[N <: Nat, Acc <: Nat] = Wrap[Succ[Acc]]#IF[_0, Succ[Acc], Nat]
}
toBoolean[ Eq[ Mod[_4, _6], _3] ]
Error:(110, 18) could not find implicit value for parameter b: BoolRep[Eq[Mod[_4,_6],_3]]
toBoolean[ Eq[ Mod[_4, _6], _3] ]
^
键入Mod[A尝试比较:t ModFold[_2]#Wrap[Succ[_1]]#如果[_0,Succ[_1],Nat]
与:t ModFold[_2]#Apply[_1,_2]
。这应该会告诉你这两种类型的不同之处。
implicitly[ModFold[_2]#Wrap[Succ[_1]]#IF[_0, Succ[_1], Nat] <:< Nat]
// correct
implicitly[ModFold[_2]#Apply[_1, _2] <:< Nat]
// error, Cannot prove that Bool.this.IF[_0,Succ[_2],Nat] <:< Nat.