我发现another question与此警告有关,但在我的情况下答案无济于事。
我有这段代码:
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
类型注释,我的代码将编译而不会发出警告。有什么作用?
答案 0 :(得分:3)
这仅仅是lwt的ppx的一个缺陷,无法将(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: recognize constrained catch-all cases #640