我在使用CS3110 教科书的 Promises 部分中描述的语法lwt_ppx
时遇到问题( https://cs3110.github.io/textbook/chapters/ds/promises.html)。let%lwt
在提供的代码片段中:
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
我正在尝试使用沙丘编译代码。我的沙丘文件如下所示:
(executable
(name main)
(libraries lwt.unix lwt_ppx))
但是,当我运行该命令时dune exec ./main.exe
,我收到错误消息“未解释的扩展名‘lwt’。”
我已经验证我已经lwt_ppx
使用安装了该软件包,有趣的是,当我运行时,opam list
代码按预期工作:utop
#require "lwt_ppx";;
#require "lwt.unix";;
#use "main.ml";;
我的沙丘配置可能做错了什么?任何帮助将不胜感激。
lwt_ppx
是一个预处理器,因此也需要添加到该preprocess
节中:但还要注意,从 4.08 开始,您可以使用 let 运算符来达到几乎相同的目的,而无需任何预处理器。例如,您可以绑定
Lwt.bind
到let*
,那么您的示例可以写为: