我正在努力完成以下任务:
module type S = sig
type 'a t
end
module A = struct
type 'a t = 'a list
end
module B = struct
type ('a,'b) t = ('a * 'b) list
end
module Make (P : S) = struct
type 'a t = 'a P.t
end
module Single = struct
include Make (A)
end
module Tuple = struct
include Make (B)
end
基本上,我想重用make functor,除了在Tuple中,强制类型为元组。这可能吗?
我认为模块类型S搞砸了,这给了我错误:他们有不同的arities。也许有可能使用一流的模块来实现这一点?
谢谢!
答案 0 :(得分:1)
你想要完成什么?如果您忘记了仿函数,您会发现模块B
无法满足签名S
。例如:
module B1 = (B : S)
会给你同样的错误。这里的问题是,您的单一t
中的类型S
只接受1种类型变量。您不能将此签名应用于类型为t
且具有2个类型变量的模块。