2013-12-13 2 views
5

Возможно ли увидеть интерфейс загруженного модуля в интерактивном OCaml? Я (безуспешно) попытался найти такую ​​возможность, и онлайн-документы/источники не то, что я ищу.OCaml - как увидеть интерфейс модуля?

ответ

6

Стандартный трюк для этого состоит в том, чтобы определить синоним модуля, который побуждает toplevel перечислить интерфейс.

$ ocaml 
     OCaml version 4.00.1 

# #load "str.cma";; 
# module S = Str;; 
module S : 
    sig 
    type regexp = Str.regexp 
    val regexp : string -> regexp 
    val regexp_case_fold : string -> regexp 
    val quote : string -> string 
    val regexp_string : string -> regexp 
    val regexp_string_case_fold : string -> regexp 
    val string_match : regexp -> string -> int -> bool 
    . . . 
    val first_chars : string -> int -> string 
    val last_chars : string -> int -> string 
    end 
+0

Удивительная идея, позор на ocaml за то, что вы не сделали это возможным, небрежным способом. Спасибо! – mkf

+0

Я думаю, что эта функция должна быть предоставлена ​​IDE для OCaml, а не компилятором OCaml. Так что не стыдно на OCaml :-) –

+0

Я имел в виду интерактивную консоль для OCaml :), которая, похоже, называется тем, что вы называете IDE :) – mkf

1

В OCaml верхнего уровня версии 4.04.0, трюк определения синоним соответствующего модуля работает не более:

# module L = List;; 
module L = List 
# 

, но вы можете использовать include директиву:

# module L = struct include List end;; 
module L : 
    sig 
    val length : 'a list -> int 
    val cons : 'a -> 'a list -> 'a list 
    val hd : 'a list -> 'a 
    val tl : 'a list -> 'a list 
    val nth : 'a list -> int -> 'a 
    val rev : 'a list -> 'a list 
... 
    val sort_uniq : ('a -> 'a -> int) -> 'a list -> 'a list 
    val merge : ('a -> 'a -> int) -> 'a list -> 'a list -> 'a list 
    end 
# 
+1

вы можете напрямую использовать директиву #show: #show List ;; – ghilesZ

3

Оба utop и ocaml переводчики добавили #show директива с момента. Он делает именно то, что вы хотите, как в следующем примере:

│ Welcome to utop version 1.19.3 (using OCaml version 4.04.0) │   
    └──────────────────────────────────────────────────────────────┘   

Type #utop_help for help about using utop. 

─(15:12:33)─< command 0 >──────────────────────────────────────{ counter: 0 }─ 
utop # #show List;; 
module List :                  
sig                    
    val length : 'a list -> int             
    val cons : 'a -> 'a list -> 'a list 
    val hd : 'a list -> 'a 
    ... 
    val fast_sort : ('a -> 'a -> int) -> 'a list -> 'a list 
    val sort_uniq : ('a -> 'a -> int) -> 'a list -> 'a list 
    val merge : ('a -> 'a -> int) -> 'a list -> 'a list -> 'a list 
end 

PS: Я использую 4.04 версию, но я знаю, что он также работает на 4.03> и, возможно, до этого тоже..

Смежные вопросы