【发布时间】: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 很感兴趣),所以我找不到编写它的函数语法.
【问题讨论】: