Error: Unbound record field Server.callback - Ocaml
Error: Unbound record field Server.callback - Ocaml
我正在学习一个教程,该教程解释了如何使用 lwt
和 Cohttp
在 OCaml 中制作一个简单的 Web 服务器。
我有一个 _tags
文件,其中包含以下内容:
true: package(lwt), package(cohttp), package(cohttp.lwt)
还有一个webserver.ml
:
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
触发以下错误:
Error: Unbound record field callback
Command exited with code 2.
如果我改成:Server.create { callback; conn_closed }
它也会触发:
Error: Unbound record field callback
Command exited with code 2.
我不确定如何解决这个问题,所以在此先感谢您的调查。
您可能正在使用非常过时的教程,它是为旧的 cohttp
界面编写的。您可以尝试查看 the upstream repository.
中的最新教程
对于您的情况,至少应进行以下更改以编译程序:
- 您应该使用函数
Server.make
创建服务器实例;
callback
和 conn_closed
值应作为函数参数传递,而不是作为记录传递,例如,
Server.make ~callback ~conn_closed ()
您应该使用函数 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 ())
我正在学习一个教程,该教程解释了如何使用 lwt
和 Cohttp
在 OCaml 中制作一个简单的 Web 服务器。
我有一个 _tags
文件,其中包含以下内容:
true: package(lwt), package(cohttp), package(cohttp.lwt)
还有一个webserver.ml
:
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
触发以下错误:
Error: Unbound record field callback
Command exited with code 2.
如果我改成:Server.create { callback; conn_closed }
它也会触发:
Error: Unbound record field callback
Command exited with code 2.
我不确定如何解决这个问题,所以在此先感谢您的调查。
您可能正在使用非常过时的教程,它是为旧的 cohttp
界面编写的。您可以尝试查看 the upstream repository.
对于您的情况,至少应进行以下更改以编译程序:
- 您应该使用函数
Server.make
创建服务器实例; callback
和conn_closed
值应作为函数参数传递,而不是作为记录传递,例如,Server.make ~callback ~conn_closed ()
您应该使用函数
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 ())