НЕКОТОРЫЕ ([]) интерпретируются как опция 'z -> 'z вместо опции 'z list
Привет я пытаюсь написать простую функцию, используя стандартную библиотеку
следует принять следующий аргумент
try = fn: 'a -> 'b list option
a_list = 'a list
и определение следующее:
fun all_answers try a_list =
let fun acc(SOME(a), SOME(b)) = SOME(b@a)
| acc(_,_) = NONE
in
List.foldl (fn(x,y) => acc(try(x), y)) SOME([]) a_list
end
и я получаю следующую ошибку:
hw3provided.sml:70.3-70.60 Error: operator and operand don't agree [tycon mismatch]
operator domain: 'Z list option
operand: 'Y -> 'Y option
in expression:
(List.foldl (fn (<pat>,<pat>) => acc <exp>)) SOME
C:\Program Files (x86)\SMLNJ\\bin\.run\run.x86-win32.exe: Fatal error -- Uncaught exception Error with 0
raised at ../compiler/TopLevel/interact/evalloop.sml:66.19-66.27
Я попытался декомпозировать функцию, и ошибка, кажется, соответствует использованию SOME([]), если я использую NONE вместо этого, она проверяет тип прекрасно
Я в полной растерянности
просто включите его значительный IM, используя возвышенный Repl для запуска сценария
1 ответ
Выяснили решение, но на самом деле не проблема
окружить НЕКОТОРЫЕ ([]) скобками (НЕКОТОРЫЕ ([]))
на тот случай, если кто-то еще столкнется с той же проблемой