Почему я получаю предупреждение 'match case unused' с аннотацией типа, но не без нее? - PullRequest
0 голосов
/ 27 ноября 2018

Я нашел другой вопрос об этом предупреждении, но ответы не имеют смысла в моих обстоятельствах.

У меня есть этот бит кода:

let someFun (arg: string) : unit Lwt.t =
  try%lwt
    do_something arg in
    Lwt.return ()
  with (error: exn) ->
    Format.printf "Error with '%s': %s" arg (Printexc.to_string error);
    Lwt.return ()

Я получаю эту ошибку:

Предупреждение 11: этот регистр совпадений не используется.

Если я удаляю аннотацию типа exn в error, мой код компилируетсябез предупреждений.Что дает?

1 Ответ

0 голосов
/ 27 ноября 2018

Это всего лишь несовершенство pwx lwt, которое не может обнаружить (error:exn) в качестве всеохватывающего случая.Чтобы понять проблему с аннотацией, вам нужно знать, что регистр try...with переводится в:

function
| (error : exn) ->
     Format.printf "Error with '%s': %s" arg (Printexc.to_string error);
     Lwt.return ()
| exn -> Lwt.fail exn 

Здесь второй случай является избыточным и был добавлен самим ppx.Без аннотации типа lwt_ppx достаточно умен, чтобы обнаружить, что этот случай не нужен, и, следовательно, генерирует только:

       function
        | error ->
          Format.printf "Error with '%s': %s" arg (Printexc.to_string error);
          Lwt.return ()

РЕДАКТИРОВАТЬ: эта проблема должна быть исправлена ​​в следующей версии ppx_lwt: ppx: распознавать ограниченные универсальные случаи # 640

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...