Приведение типа данных SML: привязка не является исчерпывающей - PullRequest
0 голосов
/ 07 мая 2020

У меня есть эта «форма» как Little MLer называет ее

datatype 'a pizza =
         Bottom
         | Topping of ('a * ('a pizza))

и это

datatype fish =
         Anchovy
         | Lox
         | Tuna

, а вот объект этого типа

Topping (Tuna, (Topping (Anchovy, Topping (Lox, Topping (Tuna, Bottom)))))

типа fish pizza. Теперь, когда я пробую это

val Topping (f1,f2) = Topping (Tuna, (Topping (Anchovy, Topping (Lox, Topping (Tuna, Bottom)))))

Это предупреждение

stdIn:1.6-514.6 Warning: binding not exhaustive
:           Topping (f1,f2) = ...
: val f1 = Tuna : fish
: val f2 = Topping (Anchovy,Topping (Lox,Topping (Tuna,Bottom))) : fish pizza

Мне нужен способ доступа к Tuna как f1, а f2 будет

(Topping (Anchovy, Topping (Lox, Topping (Tuna, Bottom))))

как начало и конец списка. Почему предупреждение? Как я могу получить формат x::xs для упрощения манипуляций "голова-хвост"?

1 Ответ

0 голосов
/ 07 мая 2020

Это предупреждение, потому что ваш шаблон не соответствует Bottom - сопоставленное значение в этот момент не оценивается, известен только тип.

Поскольку вы знаете, что пицца не Bottom, вы можете игнорировать это.

...