私は Lwt 2.7.0 でこのコードを書きました:
open Lwt
let listen_address = Unix.inet_addr_loopback
let port = 9000
let backlog = 1
let () = Lwt_log.add_rule "*" Lwt_log.Info
let create_socket () =
let open Lwt_unix in
let sock = socket PF_INET SOCK_STREAM 0 in
let sockaddr = ADDR_INET(listen_address, port) in
let%lwt () = Lwt_unix.Versioned.bind_2 sock sockaddr in
listen sock backlog;
sock
そして、このエラーが発生しました(最後の行、つまり sock
):
Error: This expression has type Lwt_unix.file_descr
but an expression was expected of type 'a Lwt.t
そうsock
です、タイプは ですLwt_unix.file_descr
。なぜコンパイラはこのプログラムをスローして、タイプを強制するの'a Lwt.t
でしょうか? (見つかったタイプを尋ねると、タイプであることがわかりcreate_socket
ますunit -> '_a
)
PS : Daniil Baturin に感謝します : http://baturin.org/code/lwt-counter-server/