“Error: unbound module” in OCaml

匿名 (未验证) 提交于 2019-12-03 00:52:01

问题:

Here's a simple example of using the library Cohttp:

open Lwt open Cohttp open Cohttp_lwt_unix  let body =   Client.get (Uri.of_string "http://www.reddit.com/") >>= fun (resp, body) ->   let code = resp |> Response.status |> Code.code_of_status in   Printf.printf "Response code: %d\n" code;   Printf.printf "Headers: %s\n" (resp |> Response.headers |> Header.to_string);   body |> Cohttp_lwt.Body.to_string >|= fun body ->   Printf.printf "Body of length: %d\n" (String.length body);   body  let () =   let body = Lwt_main.run body in   print_endline ("Received body\n" ^ body) 

I'm trying to compile it

 ocaml my_test1.ml 

Error:

Error: Unbound module Lwt

How to actually include/require the module Lwt into my app?

update

Also:

$ ocamlbuild bash: ocamlbuild: command not found 

But:

$ opam install ocamlbuild [NOTE] Package ocamlbuild is already installed (current version is        0.12.0). 

And

$ opam install ocamlfind [NOTE] Package ocamlfind is already installed (current version is        1.7.3-1). 

And

$ ocamlfind bash: ocamlfind: command not found 

Where are ocamlfind and ocamlbuild located?

update2

$ ocamlfind ocamlc -package lwt -c my_test1.ml   File "my_test1.ml", line 2, characters 5-11:  Error: Unbound module Cohttp 

回答1:

You have several options depending on your needs.

1) If you want to create a full project for your binary I recommend looking at jbuilder. Here is a very nice guide that explains the environment/project configuration step-by-step: OCaml for the impatient.

2) Another option is to compile the binary directly as you were trying to do:

ocamlbuild -pkg lwt -pkg cohttp-lwt-unix my_test1.native 

Note that you need to have a file named my_test1.ml to generate the requested my_test1.native.

3) And finally for quick scripts I find it handy to be able to ask the OCaml interpreter to load the dependencies directly in the source file. Just add the following to the beginning of your file:

#use "topfind";; #require "lwt";; #require "cohttp-lwt-unix";; 

And then run ocaml my_test1.ml.


Hope this helps! :)

Also looking at the command not found errors you are getting I can suggest to make sure your environment is correctly configured. The Real World OCaml book has a wiki page for that: https://github.com/realworldocaml/book/wiki/Installation-Instructions



标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!