ocaml: utop, есть ли способ перечислить все функции модуля?

В utop, при открытии библиотеки (через ~require ...) или при открытии модуля (через open Module_name), есть ли способ получить содержимое библиотеки или модуля? Utop предлагает это по вкладкам завершения, но я хотел бы видеть все функции сразу.

3 ответа

Решение

В utop Вы можете использовать #show команда. Например

utop # #show Stack;;
module Stack :
  sig
    type 'a t
    exception Empty
    val create : unit -> 'a t
    val push : 'a -> 'a t -> unit
    val pop : 'a t -> 'a
    val top : 'a t -> 'a
    val clear : 'a t -> unit
    val copy : 'a t -> 'a t
    val is_empty : 'a t -> bool
    val length : 'a t -> int
    val iter : ('a -> unit) -> 'a t -> unit
  end

Не обязательно в Utop, вы можете использовать следующее:

# module type S = module type of Module_of_your_interest;;
module type S =
  sig
    ...
    ...
  end

Предупреждение: некоторые модули имеют действительно большие подписи.

Если вас интересуют имена функций, доступные в библиотеке, вы можете написать:

#module S = Library_name;;

например:

#module M = String;;

Выход будет:

модуль M: sig external length: string -> int = "%string_length" external get: string -> int -> char = "%string_safe_get" внешний набор: string -> int -> char -> unit = "%string_safe_set" external create: int -> string = "caml_create_string" val make: int -> char -> string val copy: string -> string val sub: string -> int -> int -> string val fill: string -> int -> int -> char -> unit val blit: string -> int -> string -> int -> int -> unit val concat: string -> список строк -> string val iter: (char -> unit) -> string -> unit val iteri: (int -> char -> unit) -> строка -> отображение единицы измерения: (char -> char) -> строка -> обрезка строки string: строка -> строка val экранирована: строка -> индекс строки string: string -> char -> int val rindex: string -> char -> int val index_from: строка -> int -> char -> int val rindex_from: строка -> int -> char -> int val содержит: строка -> char -> bool val содержит_from: строка -> int -> char -> bool val rcontains_from: string -> int -> char -> bool val верхний регистр: строка -> строка val строчные буквы: строка -> строка val прописные буквы: строка -> строка val uncapitalize: строка -> тип строки t = строка val сравнение: t -> t -> int external unsafe_get: string -> int -> char = "%string_unsafe_get" external unsafe_set: string -> int -> char -> unit = "%string_unsafe_set" external unsafe_blit: string -> int -> string -> int -> int -> unit = "caml_blit_string" "noalloc" external unsafe_fill: string -> int -> int -> char -> unit = "caml_fill_string" "noalloc" end

После этого вы даже можете использовать M в качестве псевдонима String. например:

# M.concat " " ["one"; "two"; "three"];;
Другие вопросы по тегам