Как получить информацию о типе в интерактивном Ocaml?

Я использую Ocaml версии 4. Когда я определяю интерактивно некоторый тип, интерпретатор печатает строковое представление типа сразу после этого:

# type foo = Yes | No;;         <-- This is what I entered
type foo = Yes | No             <-- This is what interpreter bounced

Но после того, как я напечатаю больше определений, иногда я хочу снова увидеть текстовое представление типа.

В Haskell я могу ввести ": t foo".

Как это сделать в Ocaml?

Ответы

Ответ 1

В utop вы можете использовать директиву #typeof:

#typeof "list";;
type 'a list = [] | :: of 'a * 'a list 

Вы можете вводить значения и типы внутри двойных кавычек:

let t = [`Hello, `World];;
#typeof "t";;
val t : ([> `Hello ] * [> `World ]) list   

P.S. И даже лучшим решением было бы использовать мерлин.

Ответ 2

Насколько я знаю, в Ocaml нет способа получить информацию о типе в строковой форме

Вам нужно будет создать сопоставление шаблонов для каждого из ваших типов

type foo = Yes | No;;

let getType = function
  |Yes -> "Yes"
  |No -> "No"    
  ;;

let a = Yes;;
print_string (getType a);;