Scala 3 Match Type结合F-Bounded类型出现Cannot prove编译错误求解
Scala Match Type 匹配带F-Bounded约束类型失败问题说明
根因分析
你为UnitOfMeasure添加F-Bounded泛型约束后,匹配类型Test的分支规则没有同步对齐泛型约束,导致编译器判定匹配不成立:
- 未加F-Bounded约束时,
UnitOfMeasure的泛型参数无边界要求,case UnitOfMeasure[t] => t中的无边界类型变量t符合参数要求,匹配成功。 - 添加
A <: Quantity[A]约束后,UnitOfMeasure的泛型参数必须满足F-Bounded规则,但你写的匹配分支里的t还是无边界状态,编译器认为t不满足UnitOfMeasure的参数约束,直接判定该分支无效,所以匹配类型无法正常规约。
解决方案
只需给匹配分支的类型变量加上对应F-Bounded约束即可:
type Test[X <: UnitOfMeasure[?]] = X match case UnitOfMeasure[t <: Quantity[t]] => t
修改后两个summon语句即可正常编译通过。
内容的提问来源于stack exchange,提问作者Simão Martins
相关产品推荐
相关产品推荐

