为什么绑定不详尽?

Why binding not exhaustive?

为什么在最后一行显示 binding not exhaustive 警告?

datatype fruit = Apple
datatype sizedFruit = Big of fruit | Small of fruit
val Big x = Big Apple;

我认为绑定是详尽的,因为 RHS 表达式在唯一给定的情况下与 LHS 模式匹配 x = Apple。因此,我可以放心地忽略这个警告吗?

通过将第 2 行替换为 datatype sizedFruit = Big of fruit,警告消失了,但我的实际用例不能承受这个。提前致谢。

编译器:新泽西州标准 ML(64 位)v110.96

详尽性的定义不考虑绑定的 RHS,只考虑模式本身。否则定义会复杂得多。实际上,这已经足够好了,因为没有太多理由像上面那样编写绑定而不是更简单的 val x = Apple。也就是说,在这种情况下,您可以将警告视为冗余代码的指示。 :)

是的,您可以忽略该警告。或者简化程序。