Упростить функцию возврата модуля

Эта функция должна быть в состоянии упростить, удалив ненужные let module T = ..., Но как?! Я продолжаю получать синтаксические ошибки. Подсказки?

let make_module dice_results : (module Tellstory.T) =
  let dice_calls = ref 0 in (* nr of times dice has been called *)
  let module T = Tellstory.Make(struct
    let dice n = 
      let result = List.nth dice_results (!dice_calls) in
      dice_calls := !dice_calls + 1;
      result
  end) in
  (module T)

1 ответ

Решение

Я не могу проверить ваш модуль, но это пример для вдохновения:

let make_module () : (module Unit) =
  (module Comparable.Make (struct type t = int with compare, sexp end))

Похоже, что следующее, должно работать:

let make_module dice_results : (module Tellstory.T) =
  let dice_calls = ref 0 in (* nr of times dice has been called *)
  (module Tellstory.Make(struct
    let dice n = 
      let result = List.nth dice_results (!dice_calls) in
      dice_calls := !dice_calls + 1;
      result
  end))
Другие вопросы по тегам