Как преобразовать полиморфное значение в строку?

Я на самом деле ищу функцию с подписью, как 'a -> string который преобразует данный полиморфный тип в строку. Я уже думал о чем-то вроде

let func elem = match elem with
| int -> string_of_int elem ...

Надеюсь, кто-нибудь может мне помочь, спасибо!

1 ответ

Невозможно сопоставить типы в OCaml, и это особенность! Такое ограничение приводит к параметризации.

Проще говоря, если функция, f, имеет для типа 'a -> stringЕго тип обещает работать над любыми возможными типами прошлого и будущего. Другими словами, функция f не может делать какие-либо гипотезы о содержании своего аргумента.

Таким образом, единственно верная возможность - не пытаться читать что-либо из аргумента и просто возвращает строку, например.

 let f _x = "x?"

Возможно, мы можем прочитать некоторые глобальные состояния с помощью функции g

let f _x = g ()

например

let counter = ref 0
let f _x = incr counter; string_of_int !counter
Другие вопросы по тегам