Если вы имеете в виду наличие модуля, который удовлетворяет 2 типам модулей, да, вы можете.
module type ADDITIVE = sig
type t
val add : t -> t -> t
end
module type MULTIPLICATIVE = sig
type t
val multiply : t -> t -> t
end
module Number : sig
include ADDITIVE
include MULTIPLICATIVE with type t := t
end = struct
type t = int
let add x y = x + y
let multiply x y = x + y
end
Мы говорим, что сигнатура модуля Number
- это включение типа модуля ADDITIVE
(который открывает t
в этом контексте) и MULTIPLICATIVE
с тем же типом в t
из t
из ADDITIVE
, поэтому мы можем реализовать модуль в соответствии с сигнатурой.