Это всего лишь несовершенство 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