НЕКОТОРЫЕ ([]) интерпретируются как опция '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 ответ

Выяснили решение, но на самом деле не проблема

окружить НЕКОТОРЫЕ ([]) скобками (НЕКОТОРЫЕ ([]))

на тот случай, если кто-то еще столкнется с той же проблемой

Другие вопросы по тегам