Я написал этот фрагмент кода с 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
)
P.S. : Спасибо Даниилу Батурину : http://baturin.org/code/lwt-counter-server/
create_socket
(unit -> 'a
), не соответствует сообщению об ошибке, которое вы сообщаете, поэтому трудно комментировать это. Однако ничто не было принуждено к объединению. Типcreate_socket
—unit -> Lwt_unix.file_descr
.unit
— это тип ввода (представленный()
в вашем определении). - person Jeffrey Scofield   schedule 12.01.2017create_socket
из-за ошибки типа.'_a
— это унифицирующая переменная промежуточного этапа вывода типа. - person antron   schedule 12.01.2017