将 lwt.t 代码放入 Ocaml 的无限循环中以获得海市蜃楼 os

Putting lwt.t code in infinite loop in Ocaml for mirage os

我有以下代码块,是我从 mirageOS github repo 修改而来的:

open Lwt.Infix

module Main (KV: Mirage_kv.RO) = struct

  let start kv =
    let read_from_file kv =
        KV.get kv (Mirage_kv.Key.v "secret") >|= function
            | Error e ->
                Logs.warn (fun f -> f "Could not compare the secret against a known constant: %a"
                KV.pp_error e)
            | Ok stored_secret ->
                Logs.info (fun f -> f "Data -> %a" Format.pp_print_string stored_secret);
               
    in
        read_from_file kv
end

此代码从名为“secret”的文件中读取数据并输出一次。 我想在休眠期间不断地读取文件并从中输出。

使用案例是这样的:虽然这个程序是 运行 我会用其他进程更新 secret 文件,所以我想看到输出的变化。

我尝试了什么?

我试图将最后一条语句放入 while 循环

in 
   while true do 
   read_from_file kv
   done

但它给出了错误 这个表达式的类型为 unit Lwt.t 但表达式应该是 unit 类型,因为它在 while 循环的主体中

我只知道 lwt 是一个线程库,但我不是 ocaml 开发人员,也不想成为一个,(我对 MirageOS 很感兴趣),所以我找不到函数式语法来写吧。

你需要把循环写成一个函数。例如

let rec loop () =
  read_from_file kv >>= fun () ->
  (* wait here? *)
  loop ()
in
loop ()