【问题标题】:Putting lwt.t code in infinite loop in Ocaml for mirage os将 lwt.t 代码放入 Ocaml 中用于 mirage os 的无限循环
【发布时间】:2019-11-15 01:18:10
【问题描述】:

我有以下从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 很感兴趣),所以我找不到编写它的函数语法.

【问题讨论】:

    标签: ocaml ocaml-lwt mirage


    【解决方案1】:

    您需要将循环编写为函数。例如

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-12-30
      • 1970-01-01
      • 2014-05-14
      • 1970-01-01
      • 2012-03-15
      • 2020-06-09
      • 2012-04-19
      • 1970-01-01
      相关资源
      最近更新 更多