Посмотрите, существует ли ключ в String Map - PullRequest
0 голосов
/ 08 мая 2018

В настоящее время я использую функтор Map для создания строковой карты: module StringMap = Map.Make(String).

Затем я пытаюсь вставить набор сопоставлений строк в список 'a объектов в StringMap. чтобы проверить, существует ли ключ, я делаю следующее:

match StringMap.find_opt key my_map with
  | None -> StringMap.add key [child] my_map
  | Some l -> StringMap.add key (child::l) my_map 

Однако при компиляции появляется сообщение о том, что привязка для find_opt имеет несвязанное значение, даже если оно определено в подписи: https://ocaml.org/learn/tutorials/map.html.

Я также пытался использовать StringMap.mem key my_map, но получаю следующую ошибку:

Error: This expression has type string but an expression was expected of type
     'a StringMap.t =
       (StringMap.Key.t, 'a, StringMap.Key.comparator_witness)
       Base__Map.t

Я оглянулся вокруг, чтобы увидеть, есть ли ошибка при наборе текста или что-то еще, но я ничего не смог найти. Есть идеи, почему я получаю одну из этих ошибок?

1 Ответ

0 голосов
/ 09 мая 2018

Согласно сообщению об ошибке вы используете базовую (или базовую) библиотеку, которые являются заменой стандартной библиотеки OCaml и имеют другой интерфейс. В частности, функция find в интерфейсе Map уже возвращает тип параметра, и, таким образом, функции find_opt нет.

Возможно, вы использовали какой-то пример из учебника jbuilder, который автоматически включает эту библиотеку.

Вы можете переключиться на стандартную библиотеку или включить совместимость со стандартной библиотекой vanilla OCaml, открыв модуль совместимости Caml, например,

open Caml

(* your code goes below *)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...