Можно ли использовать Lwt.return как последний вызов в рекурсивной функции?Lwt и рекурсивные функции
У меня есть функция, которая компилируется отлично, но не работает должным образом и выглядит как функция f
ниже. Предположим, что в этом примере нет проблемы с какой-либо функцией, представленной как g
. Я просто пытаюсь выяснить, нормально ли иметь функцию со следующей формой или если лучше/проще (и Lwt-совместимый) способ:
let rec f (x : string list) (g : string -> unit Lwt.t) =
match List.length x with
| 0 -> Lwt.return()
| _ -> g (List.hd x) >>= fun() -> f (List.tl x) g
;;
val f : string list -> (string -> unit Lwt.t) -> unit Lwt.t = <fun>
Я уверен, что делаю это неправильно. Но фактическая функция, которую я использую, намного сложнее, чем этот пример, поэтому мне сложно отлаживать ее.
Я бы добавил, что, глядя на реализацию этого модуля, вероятно, хорошая идея, просто чтобы научиться справляться с ситуацией. –