У меня есть код ниже, и я не понимаю, почему он не компилируется. Я понял, что сопоставление с образцом можно использовать для сопоставления с различными типами конструкторов, и до тех пор, пока выражения с правой стороны возвращают один и тот же тип, все должно быть в порядке. Но это не происходит ниже. Может ли кто-нибудь объяснить это?
fun myfunc (s: string, lst: string list) =
let fun f (s, []) = NONE
| f (s, x::xs') = SOME ["list"]
| f (s, SOME(x::xs')) = SOME ["some"]
in
f(s, lst)
end
При попытке запустить этот код, компилятор выдает ошибку, сообщающую
hw2provided.sml:25.13-27.46 Error: parameter or result constraints of clauses don't agree [tycon mismatch]
this clause: 'Z * 'Y list option -> 'X
previous clauses: 'Z * 'W list -> 'X
in declaration:
filter =
(fn (s,nil) => NONE
| (s,:: <pat>) => SOME (<exp> :: <exp>)
| (s,SOME <pat>) => SOME (<exp> :: <exp>))