Как преобразовать полиморфное значение в строку?
Я на самом деле ищу функцию с подписью, как '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