我想在OCaml中创建数据库和表数据类型。我可以在1个模块中使用2个sig
个关键字吗?您能举例说明如何编写签名以及如何实现签名吗?
答案 0 :(得分:1)
如果你指的是一个满足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
的{{1}}的1}},因此我们可以根据签名实现模块。