2

Mirage-skeleton 内にある MirageOS の http-fetch の例 ( https://github.com/mirage/mirage-skeleton ) を少し変更しようとしていますが、なぜできないのかを理解するのに問題があります。 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

私がやろうとしているのは、これらの2行を移動することです:

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

私のunikernel.ml startメソッドに。基本的に、スタックだけをモジュールに渡し、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 の専門家ではありませんが、別のファイルから同じ関数を呼び出しているだけなので、型の不一致という物議を醸すこの動作を理解するのは困難です。

4

1 に答える 1

2

config.mlを生成するために使用されますmain.ml。必要に応じて、そこから生成されたコードをコピーできます。

于 2016-02-17T14:36:25.973 に答える