如何解决Peano 数字类型级实现适用于类,但不适用于特征
以下使用匹配类型对 Peano 数字进行减法的类型级实现有效
sealed trait Nat
class O extends Nat
class S[N <: Nat] extends Nat
type _1 = S[O]
type _2 = S[_1]
type _3 = S[_2]
type minus[a <: Nat,b <: Nat] = (a,b) match
case (O,_) => O
case (S[n],O) => a
case (S[n],S[m]) => n minus m
type x = _2 minus _1
summon[x =:= _1]
// val res0: S[O] =:= S[O] = generalized constraint
但是如果类被更改为特征
trait O extends Nat
trait S[N <: Nat] extends Nat
那它为什么not有效
scala> type x = _2 minus _1
// defined alias type x = minus[_2,_1]
scala> summon[x =:= _1]
1 |summon[x =:= _1]
| ^
| Cannot prove that x =:= _1.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。