Подтвердить что ты не робот

Модули первого класса в OCaml 3.12: Какие вещи они упростят (или возможно)?

Я слышал, что "модули первого класса" входят в OCaml 3.12. Какие преимущества они могут предложить? Каким детям будет легче? Какую проблему они пытаются решить? Простой пример будет достаточным.

4b9b3361

Ответ 1

Это только одно возможное приложение, но модули первого класса облегчают кодирование экзистенциальных типов, в основном модуль, который упаковывает экзистенциальный тип и значение, используя этот тип). Например, см. Работу Алена Фриша по динамическим типам (код, взятый из работы Алена Фриша по типу динамиков: http://caml.inria.fr/cgi-bin/viewvc.cgi/ocaml/branches/dyntypes/stdlib/dyntypes.ml?view=markup)

module type DYN = sig
  type t
  val x: t
  val t: t ttype
end

type dyn = (module DYN)

let dyn (type s) t x =
  let module M = struct
    type t = s
    let x = x
    let t = t
  end
  in
  (module M : DYN)

Идея здесь заключается в том, что "ttype" представляет собой конкретное представление этого типа, алгебраический тип данных с конструкторами Int, Float и т.д., и у вас есть значение, тип которого скрыт, но он несет конкретное представление этот тип, который вы можете использовать, например, для более безопасной сериализации/десериализации.