ocaml - MirageOS - Http 获取示例

标签 ocaml unikernel mirage

我正在尝试修改一点 MirageOS http-fetch 示例 ( https://github.com/mirage/mirage-skeleton ),该示例可以在 mirage-sculpture 中找到,但我在理解为什么无法移动其中执行的某些函数时遇到了一些问题将 config.ml 文件添加到我的 unikernel.ml 文件中。原始 config.ml 文件如下(我将仅复制有趣的部分):

[...]
let client =
      foreign "Unikernel.Client" @@ console @-> resolver @-> conduit @-> job

let () =
  add_to_ocamlfind_libraries ["mirage-http"];
  add_to_opam_packages ["mirage-http"];
  let sv4 = stack default_console in
  let res_dns = resolver_dns sv4 in
  let conduit = conduit_direct sv4 in
  let job =  [ client $ default_console $ res_dns $ conduit ] in
  register "http-fetch" job

我想做的是移动这两行:

  let res_dns = resolver_dns sv4 in
  let conduit = conduit_direct sv4 in

进入我的 unikernel.ml 启动方法。基本上我只想将堆栈传递给我的模块并让它创建一个 dns 解析器和一个管道。我的启动函数如下:

  let start c s =
    C.log_s c (sprintf "Resolving in 1s using DNS server %s" ns) >>= fun () ->
    OS.Time.sleep 1.0 >>= fun () ->
    let res_dns = resolver_dns s in
        let conduit = conduit_direct s in 
            http_fetch c res_dns conduit >>= fun (data) ->
            Lwt.return(dump_to_db data);

现在我在 http_fetch 参数提交时收到此错误:

Error: This expression has type Mirage.resolver Mirage.impl
       but an expression was expected of type Resolver_lwt.t

我在这里问的主要是一个概念性问题,因为我显然遗漏了一些东西。我不是 OCaml/MirageOS 方面的专家,但考虑到我只是从不同的文件调用相同的函数,这种有争议的类型不匹配行为很难理解。

最佳答案

config.ml用于生成main.ml。如果需要,您可以从那里复制生成的代码。

关于ocaml - MirageOS - Http 获取示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35456484/

相关文章:

xen - 如何构建 Mirage OS 的 Xen unikernel

operating-system - Mirage OS 是否在 OCaml 中实现了 linux 内核?

vue.js - 使用 Vue 和 Cypress 进行测试时出现 Mirage 未定义错误(未定义路由)

types - 有没有办法在 OCaml 类型系统中嵌入单元处理逻辑?

ocaml - 避免警告 "Warning 21: this statement never returns (or has an unsound type.)"

gtk - 如何读取这个 OCaml 类型签名?

unit-testing - OCaml OUnit 括号示例 : setup and tear-down

Docker Container 与 Unikernel 对比