微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Peano 数字类型级实现适用于类,但不适用于特征

如何解决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 举报,一经查实,本站将立刻删除。