Если у меня есть следующая функция OCaml:
let myFun = CCVector.map ((+) 1);;
Он отлично работает в Utop, и Merlin не отмечает его как ошибку компиляции. Однако, когда я пытаюсь скомпилировать его, я получаю следующую ошибку:
Ошибка: тип этого выражения, (int, '_a) CCVector.t → (int,' _b) CCVector.t, содержит переменные типа, которые не могут быть обобщены
Если я eta-expand, однако, он компилируется отлично:
let myFun foo = CCVector.map ((+) 1) foo;;
Итак, мне было интересно, почему он не компилируется в eta-приведенной форме, а также почему эта-уменьшенная форма, похоже, работает в toplevel (Utop), но не при компиляции?
О, и документация для CCVector здесь. Часть "_a" может быть либо "RO", либо "RW", в зависимости от того, доступна ли она только для чтения или изменена.