Как преобразовать полиморфное значение в строку? - PullRequest
0 голосов
/ 12 декабря 2018

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

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

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

1 Ответ

0 голосов
/ 12 декабря 2018

Невозможно сопоставить типы в 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
...