gpt4 book ai didi

types - 在 OCaml 中键入没有 "polluting"模块的构造函数别名

转载 作者:行者123 更新时间:2023-12-04 13:38:19 28 4
gpt4 key购买 nike

我想为要在给定模块中重用的构造函数定义一个类型别名,而不必在它们定义的模块的路径前面加上前缀。我还想通过执行 open 来避免“污染”后一个模块/include这将导入太多定义。

这是我想要的示例(无法编译):

module A = struct
type t = Red | Blue
end

module B = struct
type t = A.t
let f = function
| Red -> 1 (*Error: Unbound constructor Red*)
| Blue -> 0
let
end

include Aopen A inside B 都可以在这里工作( RedBlue 将是有效的),但两者都会向 B 添加定义,“污染”它。
open会造成最少的伤害,但仍然允许犯错误,例如如果 A定义了一个在 B 中意外使用的符号由于 open ,我不会有编译错误。

有没有办法避免这种“污染”,同时让我不必输入 A.Red/ A.Blue在模块 B 中?

最佳答案

就在这里。

您可以在定义 t 时在 B , 声明它等于 A.t并重写其构造函数列表:

module B = struct
type t = A.t = Red | Blue
let f = function
| Red -> 1
| Blue -> 0
end

类型检查器将验证定义是否与 A 中的完全相同。因此,即使您修改了 A 中的类型定义,系统也会提醒您在 B 中进行更改。以及(是的,您键入两次相同的内容,但这是一个简单的愚蠢复制/粘贴)。

关于types - 在 OCaml 中键入没有 "polluting"模块的构造函数别名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31208578/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com