Val*_*nko 4 ocaml module compiler-errors include functor
我有
module type T = sig
type t
end
Run Code Online (Sandbox Code Playgroud)
和
module Make (TypeProvider : T) = struct
include TypeProvider
type d = Wrapped of t
end
Run Code Online (Sandbox Code Playgroud)
和
module Test = struct
include Make (struct type t = ForWrap end)
let f = function | Wrapped ForWrap -> ()
end
Run Code Online (Sandbox Code Playgroud)
我想象编译后的测试就像
module Test = struct
type t = ForWrap
type d = Wrapped of t
let f = function | Wrapped ForWrap -> ()
end
Run Code Online (Sandbox Code Playgroud)
但实际上,它不是可编译的代码.OCaml说我:
module Test = struct
include Make (struct type t = ForWrap end)
let f = function | Wrapped ForWrap -> ()
^^^^^^^
Run Code Online (Sandbox Code Playgroud)
错误:未绑定的构造函数ForWrap
end
Run Code Online (Sandbox Code Playgroud)
我无法理解为什么.我的解决方案有什么问题?
让我们看看签名Make (struct type t = ForWrapp end):
module M = Make(struct type t = ForWrapp end)
Run Code Online (Sandbox Code Playgroud)
ocamlc -c -i xxx.ml 向您展示此模块的签名:
module M : sig
type t
type d = Wrrapped of t
end
Run Code Online (Sandbox Code Playgroud)
请注意,构造函数ForWrapp在结果模块中不可用.这就是您的代码不进行类型检查的原因.
为什么构造函数消失了?这是因为仿函数Make的参数签名是T. T定义一个t抽象的类型.即使您应用于Make具有更详细签名的模块(此处struct type t = ForWrapp end),它也会被强制转换T为构造函数信息.
| 归档时间: |
|
| 查看次数: |
89 次 |
| 最近记录: |