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"];;