Почему обязательность не исчерпывающая - PullRequest
1 голос
/ 23 марта 2020

Почему 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, но мой реальный вариант использования не может этого позволить. Заранее спасибо.

Компилятор: Standard ML из Нью-Джерси (64-разрядная версия) v110,96

1 Ответ

2 голосов
/ 23 марта 2020

Определение исчерпанности не рассматривает RHS привязки, а только сам образец. В противном случае определение было бы намного сложнее. На практике это достаточно хорошо, потому что нет особых оснований писать привязки, подобные приведенным выше, вместо простых val x = Apple. Таким образом, вы можете принять предупреждение как указание избыточного кода в этом случае. :)

Так что да, вы можете игнорировать предупреждение. Или упростить программу.

...