我目前正在使用Map仿函数创建字符串映射:module StringMap = Map.Make(String)
。
然后我尝试将一组字符串映射插入到StringMap中的'a
对象列表中。检查密钥是否已经存在,我正在执行以下操作:
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
我环顾四周看是否有输入错误或其他东西,但一直无法找到任何东西。关于我为什么会遇到这些错误的任何想法?
答案 0 :(得分:5)
根据您使用Base(或Core)库的错误消息,它们是OCaml标准库的替换,并具有不同的接口。特别是,find
接口中的Map
函数已经返回了一个选项类型,因此没有find_opt
函数。
也许,您已经使用了jbuilder教程中的一些示例来自动启用此库。
您可以通过打开兼容性模块Caml
切换到标准库或启用与vanilla OCaml标准库的兼容性,例如,
open Caml
(* your code goes below *)