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