введите + 'at в библиотеке карт Ocaml? - PullRequest
5 голосов
/ 03 марта 2011

Я работаю со встроенной в Ocaml библиотекой карт для решения проблемы, и у меня возникают проблемы с доступом к типу данных самой карты. Предполагается, что это третья реализация словаря (первые два - список и несбалансированное двоичное дерево поиска), и часть функтора, который я должен реализовать, - это «тип dict», который является типом данных реального словаря. Для списка введите dict было (D.key * D.value) список; для дерева введите dict было Пусто | Ветвь ((D.key * D.value), dict, dict). Документация Ocaml гласит:

type +'a t 
The type of maps from type key to type 'a.

Это похоже на то, что мне нужно, но я не могу правильно его использовать. Кстати, М - это мой модуль Map.Make. Я пробовал

type dict = M.t
type dict = M.+D.value t
type dict = M.+

Но я продолжаю получать сообщения об ошибках. Кто-нибудь может помочь? Большое спасибо!

Ответы [ 2 ]

7 голосов
/ 03 марта 2011

+ - это аннотация дисперсии, она не является частью имени.Синтаксис параметризованного типа: param type или (param, param, ...) type в OCaml: int list, (int, string) Hashbl.t.То, что вы хотите здесь, это D.value M.t.

4 голосов
/ 03 марта 2011

Вы можете узнать это, спросив компилятор ocaml: ocamlc -i file.ml

Чтобы создать карту с помощью Map.Make из стандартной библиотеки ocaml, этот файл будет выглядеть следующим образом (для карты от int до'a):

module Intmap = Map.Make (struct
   type t = int
   let compare = Pervasives.compare
end)

Компилятор ocaml выдаст вам что-то вроде этого (при вызове ocamlc -i mymap.ml):

module Intmap :
   sig
      type key = int
      type +'a t
      val empty : 'a t
      ...
end
...