Функция обновления работает не так, как вы думаете
key -> ('a option -> 'a option) -> 'a t -> 'a t
Вы видите, что второй аргумент - это функция, которая принимает 'a option
и возвращает 'a option
, поэтому вы не можете напрямуюобновить с новым значением, а вместо этого передать функцию, которая возвращает новое значение, в соответствии с предыдущим, например:
let m = TestMap.update "Julie" (fun _ -> Some 10) m;;
Это потому, что, как указано в документации, переданный 'a option
сообщает вам, было лисопоставление для ключа и возвращенного 'a option
позволяет вам изменить его или даже удалить (через None
).
Если вам нужно просто обновить сопоставление, вы можете снова использовать Map.add
, естьнет необходимости использовать более продвинутый Map.update
.