web-dev-qa-db-ja.com

OCamlの「エラー:非バインドモジュール」

ライブラリ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)

私はそれをコンパイルしようとしています

 ocaml my_test1.ml

エラー:

エラー:非バインドモジュールLwt

実際にアプリにモジュールLwtを含める/要求する方法

更新

また:

$ ocamlbuild
bash: ocamlbuild: command not found

だが:

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

そして

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

そして

$ ocamlfind
bash: ocamlfind: command not found

Ocamlfindとocamlbuildはどこにありますか?

pdate2

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

ニーズに応じていくつかのオプションがあります。

1)バイナリ用の完全なプロジェクトを作成する場合は、 jbuilder を参照することをお勧めします。環境/プロジェクト設定を段階的に説明する非常に素晴らしいガイドがあります: OCaml for the impatiient

2)別のオプションは、あなたがやろうとしていたようにバイナリを直接コンパイルすることです:

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

要求されたmy_test1.mlを生成するには、my_test1.nativeという名前のファイルが必要であることに注意してください。

3)最後に、簡単なスクリプトのために、OCamlインタープリターに依存関係をソースファイルに直接読み込むように依頼できると便利です。ファイルの先頭に次を追加するだけです:

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

そして、ocaml my_test1.mlを実行します。


お役に立てれば! :)

また、取得しているcommand not foundエラーを確認して、環境が正しく構成されていることを確認することをお勧めします。 Real World OCamlブックには、そのためのWikiページがあります。 https://github.com/realworldocaml/book/wiki/Installation-Instructions

8
Rizo