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

在类型函数中使用匹配类型时证明类型相等的问题

如何解决在类型函数中使用匹配类型时证明类型相等的问题

给定

type Bool
type True <: Bool
type False <: Bool

type Neg [B <: Bool] <: Bool =
  B match
    case True => False
    case False => True

编译(这里没有惊喜):

summon [Neg [True] =:= False]

但令人惊讶的是,这并没有:

summon [Neg [False] =:= True]

这似乎取决于类型匹配中的大小写顺序 - 如果我更改 Neg 中的分支顺序,Neg [False] 会起作用,但 Neg [True] 不会?!>

Scala 3.0.0-RC3

编辑:

这按预期工作(Neg 不变):

trait Bool
class True extends Bool
class False extends Bool

这也是:

trait Bool
object True extends Bool
object False extends Bool
type True = True.type
type False = False.type

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。