如何将一流的模块解压缩到具有类声明的对象的模块?
Posted
技术标签:
【中文标题】如何将一流的模块解压缩到具有类声明的对象的模块?【英文标题】:How to unpack first-class module to module for object with class declaration? 【发布时间】:2014-07-31 13:26:03 【问题描述】:我有:
module type A = sig end
此代码有效:
let f x =
let module X = (val x : A) in
object end
还有这个:
let f (module X : A) =
object end
但这是无效的:
class c x =
let module X = (val x : A) in
(* ^^^ Error: Syntax error *)
object end
还有这个:
class c (module X : A) =
(* ^^^^^^^^^^^^^ Error: Modules are not allowed in this pattern. *)
object end
我不明白:为什么? 如何在类上下文中将一流模块解压缩为对象模块? 我的编译器版本 = 4.01.0
谢谢
【问题讨论】:
【参考方案1】:不允许使用任何形式的类定义本地模块:
class c =
let module L = List in
object end;;
Characters 18-24:
let module L = List in
^^^^^^
Error: Syntax error
我不确定确切的原因,但我知道 on very good authority 很难实施。
但是,可以接受一个类的第一类模块参数并将其解压缩到实际使用它的方法和值中。例如:
class c d = object
method foo =
let module D = (val d : A) in
D.b + 5
end
【讨论】:
以上是关于如何将一流的模块解压缩到具有类声明的对象的模块?的主要内容,如果未能解决你的问题,请参考以下文章