Почему частичное заявление имеет ограничение по стоимости?

я могу понять, чтоallowing mutable является причиной ограничения стоимости и слабого полиморфизма. По сути, изменяемая ссылка внутри функции может изменить используемый тип и повлиять на будущее использование функции. Таким образом, реальный полиморфизм не может быть введен в случае несоответствия типов.

Например,

# let remember =
    let cache = ref None in
    (fun x ->
       match !cache with
       | Some y -> y
       | None -> cache := Some x; x)
  ;;
val remember : '_a -> '_a = <fun>

В помните, кеш изначально был'a option, но как только он вызывается в первый разlet () = remember 1, кеш становитсяint option, таким образом, тип становится ограниченным. Ограничение стоимости решает эту потенциальную проблему.

Что я до сих пор не понимаю, так это ограничение стоимости частичного применения.

Например,

let identity x = x
val identity: 'a -> 'a = <fun>

let map_rep = List.map identity
val map_rep: '_a list -> '_a list = <fun>

в вышеприведенных функциях я не вижу ни ref, ни изменяемого места, почему все еще применяется ограничение значения?

Ответы на вопрос(4)

Ваш ответ на вопрос