简体   繁体   中英

OCaml Unbound value List.assoc

I'm compiling a module with a function that calls List.assoc, it fails to build giving me "Unbound value List.assoc" ... i've tried other List functions and they work fine, it also works fine in utop.

I can reproduce this by compiling an ml file using corebuild and this code

open Core.Std

let p = [(1,2);(2,3);(3,4)]
in List.assoc 2 p

Here is my build command:

$ corebuild blah.byte + ocamlfind ocamlc -c -w A-4-33-40-41-42-43-34-44 -strict-sequence -g -bin-annot -short-paths -thread -syntax camlp4o -package bin_prot.syntax -package sexplib.syntax,comparelib.syntax,fieldslib.syntax,variantslib.syntax -package core -o blah.cmo blah.ml
File "blah.ml", line 5, characters 3-13: Error: Unbound value List.assoc Command exited with code 2.

The Core library replaces the standard OCaml List module. When you open Core.Std you mask OCaml's standard List with Core's Core.Std.List module. The Core.Std.List.assoc function does not exist. If you aren't opening Core.Std in utop then you're most likely still working with OCaml's standard library List module.

Core does provide a replacement for this functionality with List.Assoc . You can see some documentation here: https://ocaml.janestreet.com/ocaml-core/latest/doc/core_kernel.112.17.00/_build/lib/core_list/#/module:Assoc

List.Assoc.find_exn looks like it is a replacement for the stdlib's List.assoc .

The API has changed to:

List.assoc 1 p 

see this: http://caml.inria.fr/pub/docs/manual-ocaml/libref/List.html

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM