У меня есть функция:
let rec loop size elem =
if size <= 0 then []
else elem::( loop (size - 1) elem);;
И если я наберу это в utop, я получу ожидаемый тип int -> 'a -> 'a list = <fun>
, однако, если я сделаю функцию let loop_3 = loop 3
, тип loop_3
станет '_a -> '_a list = <fun>
. Основное отличие, касающееся меня, заключается в том, что он меняет функцию с полиморфной функции (чей вход 'a
) на слабую функцию полиморфизма (тип ввода '_a
). Почему это происходит? Есть ли способ обойти это?