Во-первых, у вас есть синтаксическая ошибка, приложение функтора должно быть написано:
Static_ipv4.Make(Random)(Clock)(Ethernet)(Arp)
Тогда у вас есть ошибка типа: Static_ipv4.Make(Random)(Clock)(Ethernet)(Arp)
- это выражение модуля, а не тип модуля. Более того, неясно, нужно ли вам даже ограничение подписи. Простое написание
module Ipv4 = struct
include Static_ipv4
let more = 0
end
работает, если вы хотите создать расширенную версию модуля Static_ipv4
.
Но, возможно, вы хотели добавить несколько функций к результату функтора? В этом случае вы можете использовать:
module Ipv4 = struct
include Static_ipv4.Make(Random)(Clock)(Ethernet)(Arp)
let an_new_and_shiny_function = ()
end
Если вы действительно хотите установить одинаковый тип, вам нужно повторно использовать сигнатуру результата функтора:
module Ipv4: sig
include Mirage_protocols.IP with type ipaddr = Ipaddr.V4.t
val connect : ip:(Ipaddr.V4.Prefix.t * Ipaddr.V4.t) -> ?gateway:Ipaddr.V4.t ->
end
= struct
include Static_ipv4.Make(Random)(Clock)(Ethernet)(Arp)
let an_new_and_shiny_function.
end