Модули первого класса в OCaml 3.12: какие вещи они сделают более легкими (или возможными)? - PullRequest
17 голосов
/ 20 марта 2010

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

Ответы [ 2 ]

13 голосов
/ 20 марта 2010

Это только одно из возможных приложений, но первоклассные модули позволяют легко кодировать экзистенциальные типы, в основном модуль, упаковывающий экзистенциальный тип и значение, использующее этот тип). Например, см. Работу Алена Фриша по динамическим типам (код взят из работы Алена Фриша по типам: 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 и т. Д., И у вас есть здесь значение, тип которого скрыт, но который несет конкретное представление этот тип, который вы можете использовать, например, для более безопасной сериализации / десериализации.

12 голосов
/ 15 октября 2010

Возможно, немного поздно, но новая статья Первоклассные модули: скрытая сила и дразнящие обещания точно на тему. Это набор рецептов / жемчужин вокруг первоклассных модулей от Олега Киселева (oleg) и Джереми Яллопа (например, автора проекта Deriving ).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...