2016-11-07 8 views
1

OCaml에서 간단한 웹 서버를 만드는 법을 설명하는 lwtCohttp의 튜토리얼을 따르고 있습니다.Error : 언 바운드 레코드 필드 Server.callback - Ocaml

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

그리고 webserver.ml :

내가 다음이 포함 된 _tags 파일이

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

내가 변경하는 경우 : 다음

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()) 

ocamlbuild -use-ocamlfind webserver.native 다음과 같은 오류를 트리거 까지 : Server.create { callback; conn_closed } 답 :

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

이 문제를 해결하는 방법에 대해 잘 모르겠습니다. 미리 조사해 주셔서 감사합니다.

답변

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

을! 매우 상세한 답변을 주셔서 감사합니다. –