Сопоставление шаблонов OCaml со встроенными типами

Я пытаюсь написать полиморфную функцию, которая должна делать что-то немного другое в зависимости от типа параметра. Есть ли способ, которым я могу сопоставить шаблон с типом объекта, используя встроенные типы? Я думаю о чем-то в этом роде:

let to_string v =
    match v with
    | string -> v
    | int -> string_of_int v
    | _ -> ""

но это не похоже на действительную программу OCaml.

Я видел этот вопрос, но это не Я тоже не могу ответить на мой вопрос. Я бы предпочел использовать стандартные встроенные типы, а не создавать для этого новые типы (хотя я могу сделать это, если это единственный способ).


person a_m0d    schedule 29.07.2010    source источник


Ответы (1)


На самом деле этот ответ полностью относится к вам. Вы можете сопоставить только один класс типов, а тип, определенный объединением int, string, float,..., не существует, и его необходимо создать (как в предыдущем ответе). 'a работает с определенным типом, но не представляет объединение всех типов.

Вы можете сделать то, что хотите, используя внешнюю функцию C (18.3), хотя, взглянув на раздел атомарных тегов, я не уверен, что вы сможете различить char и int.

person nlucaroni    schedule 29.07.2010
comment
:( - вот чего я боялся. Ну что ж, думаю, моя программа будет выглядеть не так красиво. - person a_m0d; 29.07.2010
comment
Почему вы пытаетесь сделать что-то подобное? вероятно, есть лучший способ. - person nlucaroni; 29.07.2010
comment
Я думал, что смогу написать полиморфную функцию таким образом, с переопределениями для разных типов, которые мне нужны, но, подумав еще немного, мне, вероятно, все равно придется использовать варианты, так как в конечном итоге я сделаю шаг лексирования также. - person a_m0d; 30.07.2010