MirageOS - пример Http-fetch

Я пытаюсь немного изменить пример http-выборки MirageOS ( https://github.com/mirage/mirage-skeleton), который можно найти внутри скелета mirage, но у меня возникают проблемы с пониманием, почему я не могу переместить некоторые функции, выполняемые в файле 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, но это противоречивое поведение несоответствия типов трудно понять, учитывая, что я просто вызываю одну и ту же функцию из другого файла.

1 ответ

Решение

config.ml используется для генерации main.ml, Вы можете скопировать сгенерированный код оттуда, если хотите.

Другие вопросы по тегам