Estou encontrando um problema ao usar lwt_ppx
e a let%lwt
sintaxe conforme descrito na seção do livro CS3110 sobre promessas ( https://cs3110.github.io/textbook/chapters/ds/promises.html ).
No trecho de código fornecido:
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
Estou tentando compilar o código usando dune. Meu arquivo dune se parece com isso:
(executable
(name main)
(libraries lwt.unix lwt_ppx))
No entanto, quando executo o comando dune exec ./main.exe
, recebo a mensagem de erro "Extensão não interpretada 'lwt'".
Verifiquei que tenho o lwt_ppx
pacote instalado usando opam list
, e curiosamente, o código funciona conforme o esperado utop
quando executo:
#require "lwt_ppx";;
#require "lwt.unix";;
#use "main.ml";;
O que posso estar fazendo de errado com minha configuração de dunas? Qualquer ajuda seria muito apreciada.
lwt_ppx
é um pré-processador e, portanto, também precisa ser adicionado àpreprocess
estrofe:Mas também observe que desde 4.08 você pode usar operadores let para praticamente o mesmo propósito, sem qualquer pré-processador. Por exemplo, você pode vincular
Lwt.bind
alet*
, então seu exemplo pode ser escrito como: