gpt4 book ai didi

OCaml:如何获取 mli 文件本地的模块别名

转载 作者:行者123 更新时间:2023-12-05 08:41:54 26 4
gpt4 key购买 nike

是否可以在不创建“必须实现的新模块”的情况下为 mli 中的模块添加别名?这个示例非常人为设计,但是,例如,假设我有以下源文件 int_wrapper.ml。

type t = Int64.t

let zero = Int64.of_string "0"

我想为它定义一个接口(interface)文件,但是 Int64.t 太长了所以我想缩写它。

module I = Int64

val zero : int -> I.t

尝试编译模块时,我(可以预见)得到以下错误

ocamlbuild int_wrapper.cmo
+ ~/.opam/4.03.0/bin/ocamlc.opt -c -o int_wrapper.cmo int_wrapper.ml
File "int_wrapper.ml", line 1:
Error: The implementation int_wrapper.ml
does not match the interface int_wrapper.cmi:
The module `I' is required but not provided
Command exited with code 2.
Compilation unsuccessful after building 4 targets (0 cached) in 00:00:00.
Exit 10

那是因为 module I = Int64 不是别名。我实际上是在定义一个新模块,它恰好与 Int64 相同,并且由于该模块在签名中,所以我需要在源文件中提供一个实现。有没有办法在接口(interface)文件中获得真正的别名?

最佳答案

从 OCaml 4.08 开始(参见 release notes )现在可以通过 local substitution declarations 实现:

module I := Int64

关于OCaml:如何获取 mli 文件本地的模块别名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46416757/

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