Как получить информацию о типе в интерактивном 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);;