Преобразование имени конструктора в строку в OCaml


В моем коде есть следующие определения типов:

type tag =
| Head
| Title
| Body
| H1
| P;;

type domtree =
| Empty
| Node of tag * string * domtree list;;

Мне нужно распечатать теги вместе со строками. Но я не смог найти никакого способа преобразовать тег (имена конструкторов в определении первого типа) в строки и объединить их со Строковой частью domtree. Есть ли какой-то конкретный способ сделать это? Данные, используемые не предоставляют способ для преобразования не-встроенный в строки? Я нашел здесь похожий вопрос, но не совсем понял его.

1 4

1 ответ:

В OCaml нет такого средства, и вам нужно будет написать самостоятельно функцию преобразования tag_to_string : tag -> string.

Легко сгенерировать тело этой строки автоматически, например, используйте этот sed однострочный:

sed -e 's/\| \(.*\)/| \1 -> "\1"/'

И вставьте определение тега в его стандартный ввод. Это дает

| Head -> "Head"
| Title -> "Title"
| Body -> "Body"
| H1 -> "H1"
| P;; -> "P;;"

И вы просто должны очистить ;;.

Есть много других решений для определения этого шаблонного кода, я также люблю использовать для этого макросы Emacs.