【发布时间】:2020-04-14 22:00:11
【问题描述】:
我是一个初学者,我很难理解我做错了什么。感谢所有指导。我有签名
val input :
arpv4:('a -> unit Lwt.t) ->
ipv4:('a -> unit Lwt.t) ->
ipv6:('a -> unit Lwt.t) ->
?decode:(Mirage_protocols.Ethernet.proto ->
Cstruct.t -> Mirage_protocols.Ethernet.proto * 'a) ->
t -> Cstruct.t -> unit Lwt.t
目标是通用的并将实现推迟到参数函数。如果我使用Cstruct.t类型实现表达式,比如,
...
decode:(fun proto payload -> (proto, payload))
我得到了错误
Values do not match:
val input :
arpv4:(Cstruct.t -> unit Lwt.t) ->
ipv4:(Cstruct.t -> unit Lwt.t) ->
ipv6:(Cstruct.t -> unit Lwt.t) ->
?decode:(Mirage_protocols.Ethernet.proto ->
Cstruct.t -> Mirage_protocols.Ethernet.proto * Cstruct.t) ->
t -> Cstruct.t -> unit Lwt.t
is not included in
val input :
arpv4:('a -> unit Lwt.t) ->
ipv4:('a -> unit Lwt.t) ->
ipv6:('a -> unit Lwt.t) ->
?decode:(Mirage_protocols.Ethernet.proto ->
Cstruct.t -> Mirage_protocols.Ethernet.proto * 'a) ->
t -> Cstruct.t -> unit Lwt.t
我不明白为什么 Cstruct.t 不匹配 'a。我做错了什么?
【问题讨论】:
-
在discuss.ocaml.org/t/why-doesnt-a-specific-type-fulfill-a/5525 中似乎提出了相同的问题,如果两次询问相同的问题,请交叉链接以避免重复工作。
标签: ocaml