Зачем использовать тип модуля в Ocaml?

qc1iu спросил: 27 ноября 2017 в 06:13 в: types

Я перепутал с типом модуля в Ocaml.

Мне было интересно, что в какой ситуации мы должны использовать тип модуля?

Я обычно использую модуль sig в .mli, чтобы раскрыть некоторые детали, и поместить соответствующую структуру модуля реализации в .ml.

Например:

.mli

module A:
 sig
   type t = T of string
 end

. ml

module A =
 struct
   type t = T of string
 end

По этой причине я думаю, что модуль Ocaml, такой как .h и .c файл в C.

Я знаю, что тип модуля может объявлять интерфейс, но интерфейс был не таким же, как интерфейс Java.

Как пример из книги:

open Core.Std module type ID = sig
  type t
   val of_string : string -> t
  val to_string : t -> string
 end  module String_id = struct
   type t = string
    let of_string x = x
    let to_string x = x
  end  module Username : ID = String_id
  module Hostname : ID = String_id  type session_info = { user: Username.t;
                  host: Hostname.t;
                  when_started: Time.t;
                }  let sessions_have_same_user s1 s2 =
       s1.user = s2.host

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

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

Какое реальное приложение для типа модуля ??


0 ответов