case val of case1
не делает то, что вы думаете, а именно проверяет, равен ли val case1.Он вводит новую привязку с именем case1, скрывая существующую привязку, значение которой равно val.Вы не получаете сравнения на равенство бесплатно: вы должны запросить их, используя ==
, возможно, в предложении guard или в выражении if
.Итак, у вас есть два избыточных шаблона: предложение _
никогда не будет введено, потому что шаблон case1
соответствует всем возможным входам.
Вместо этого напишите тест на равенство самостоятельно.Есть более хорошие способы сделать это, но способ сделать это, внося минимальные изменения в вашу существующую функцию, может быть:
... do
val <- evaluate var memory
if val == case1
then interpret ...
else interpret ...