首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Lwt 2.7.0型误差

Lwt 2.7.0型误差
EN

Stack Overflow用户
提问于 2017-01-12 16:00:54
回答 1查看 112关注 0票数 2

我用Lwt 2.7.0编写了这段代码:

代码语言:javascript
复制
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):

代码语言:javascript
复制
Error: This expression has type Lwt_unix.file_descr
       but an expression was expected of type 'a Lwt.t

是的,sockLwt_unix.file_descr类型,为什么编译器会抛出这个程序并强制使用'a Lwt.t类型呢?(当我问create_socket的类型是什么时,它告诉我它的类型是unit -> '_a)

P.S.:多亏了Daniil:http://baturin.org/code/lwt-counter-server/

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-01-12 16:21:47

编译器没有将结果的类型强制为unit,而是将参数类型强制为unit,因为您拥有的参数模式是()

let%lwtLwt.bind,所以延拓(在in之后)必须计算为一个承诺(_ Lwt.t)。因为sockLwt_unix.file_descr而不是承诺,所以您必须包装它:Lwt.return sock

可能需要更多的上下文来回答您关于警告的问题,我给您留下一个评论。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41617724

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档