你不需要签名
MyFoo
这个
BaseFoo
签名在其定义中仅限于签名。
为什么?因为这就是在这个地方指定签名的目的。规范的解决方案是留下签名(通常,让签名定义放在模块定义旁边对读者来说足够清楚)。
注意当你打电话的时候
美福
在你的函子上,签名将被检查。我通常的选择就是依靠这个。
一些变通办法
鉴于你所做的尝试,我想这可能会让你感兴趣:
module type BaseFoo = sig ... end
module MyFoo = struct ... end
module MyFooHidden : BaseFoo = MyFoo (* Same as defining MyFoo : BaseFoo *)
module MyFooWithType :
BaseFoo with type t = MyFoo.t
= MyFoo (* What you want *)
这个
with type t = t'
子句允许您对模块签名进行注释,以向其添加类型信息。它非常有用,特别是在处理函子时。看到了吗
here
更多信息。
MyFooHidden
不管你想要什么。
MyFooWithType
实际上(有点)不太有用,因为如果您更改签名以添加希望导出的类型,则也需要在此处添加导出。
使用include
include
尝试。好吧,很好的尝试!你就快到了:
module MyFoo : sig
type t = A of string | B of int
include BaseFoo with type t := t
end
这个
with type t := t'
t
定义已从
BaseFoo公司
全部签名,所有实例都替换为您自己的实例
t型
here
更多细节。
美福
确实是一个
BaseFoo公司