2016-11-07 6 views
1

OCamlで単純なWebサーバーを作成する方法を説明するチュートリアルの後に、lwtCohttpを付けています。エラー:バインドされていないレコードフィールドServer.callback - Ocaml

私は次のものが含ま_tagsファイルがあります:私は変更する場合

Error: Unbound record field callback 
Command exited with code 2. 

ocamlbuild -use-ocamlfind webserver.nativeは次のエラーをトリガし、その後

open Lwt 
open Cohttp 
open Cohttp_lwt_unix 

let make_server() = 
    let callback conn_id req body = 
    let uri = Request.uri req in 
    match Uri.path uri with 
    | "/" -> Server.respond_string ~status:`OK ~body:"hello!\n"() 
    | _ -> Server.respond_string ~status:`Not_found ~body:"Route not found"() 
    in 
    let conn_closed conn_id() =() in 
    Server.create { Server.callback; Server.conn_closed } 

let _ = 
    Lwt_unix.run (make_server()) 

true: package(lwt), package(cohttp), package(cohttp.lwt) 

webserver.mlを〜へ:Server.create { callback; conn_closed }かっこ:

私はこれを解決する方法がわからないので、これを調べるために事前に感謝します。

答えて

2

古いcohttpインターフェイス用に作成された非常に古くなったチュートリアルを使用している可能性があります。最新のチュートリアルはthe upstream repositoryにあります。あなたのケースでは

は、少なくとも次の変更は、プログラムをコンパイルするために、なされるべきである。

  1. あなたは、サーバーのインスタンスを作成する機能Server.makeを使用する必要があります。
  2. callbackconn_closed値は例えば、関数のパラメータとしてではなく、記録として渡す必要があり、

    Server.make ~callback ~conn_closed() 
    
  3. あなたが作成する機能Server.createを使用し、機能Server.makeから返された値を、渡す必要がありますサーバーインスタンス。

ので、おそらく、次のように動作するはずです:

open Lwt 
open Cohttp 
open Cohttp_lwt_unix 

let make_server() = 
    let callback conn_id req body = 
    let uri = Request.uri req in 
    match Uri.path uri with 
    | "/" -> Server.respond_string ~status:`OK ~body:"hello!\n"() 
    | _ -> Server.respond_string ~status:`Not_found ~body:"Route not found"() 
    in 
    Server.create (Server.make ~callback()) 

let _ = 
    Lwt_unix.run (make_server()) 
+0

それがありません!非常に詳細な答えをありがとう。 –

関連する問題