OCaml中lwt_ppx编译报错Uninterpreted extension 'lwt'排查
问题
使用Lwt的let%lwt语法编写代码时,dune编译报错Uninterpreted extension 'lwt',但在utop中可正常运行。
代码片段(main.ml):
open Lwt_io let p = let%lwt s1 = read_line stdin in let%lwt s2 = read_line stdin in Lwt_io.printf "%s\n" (s1^s2) let _ = Lwt_main.run p
当前dune配置:
(executable (name main) (libraries lwt.unix lwt_ppx))
已确认lwt_ppx已通过opam安装,在utop中执行以下代码可正常运行:
#require "lwt_ppx";; #require "lwt.unix";; #use "main.ml";;
解决方案
你的dune配置错误在于把lwt_ppx放在了libraries字段里——lwt_ppx是PPX预处理工具,不是常规的链接库,需要单独配置在preprocess字段中。
修改后的dune配置如下:
(executable (name main) (libraries lwt.unix) (preprocess (pps lwt_ppx)))
关键说明:
libraries字段仅用于指定编译时需要链接的OCaml库,这里只需要lwt.unixpreprocess (pps ...)字段用于配置代码编译前的PPX预处理工具,lwt_ppx负责解析let%lwt这类语法扩展,必须在此配置才能让dune识别并处理该语法
内容的提问来源于stack exchange,提问作者abu fahad
相关产品推荐
相关产品推荐

