gpt4 book ai didi

OCaml - 来自类型别名的混淆(警告 40)

转载 作者:行者123 更新时间:2023-12-02 08:07:48 25 4
gpt4 key购买 nike

我不明白为什么 OCaml 无法弄清楚这里没有混淆的余地:下面的 anint 只能是 A 的。

module A = struct
type test = Graphics.status
end

module type ASIG = sig
type test = A.test
val atest : test
end

module Func (H : ASIG) = struct
let _ = let open H in atest.key
end

然而,它提高了

Warning 40: key was selected from type Graphics.status.
It is not visible in the current scope, and will not
be selected if the type becomes unknown.

如何在不禁用警告的情况下告诉它“没问题”?

我知道我可以通过打开 A 来解决它。但是,如果 H 定义了自己的函数和类型类似于——但不等于——A,那么它将产生不必要的冲突。我也知道我可以复制定义,但这违背了类型别名的目的,并且涉及很多不必要的代码重复。也许没有解决方案,但我想知道为什么 OCaml 在这个问题上如此愚蠢:类型别名应该也意味着构造函数和记录字段别名,不是吗?

最佳答案

您可以在引用字段key时在本地简单地打开模块定义原始类型,如下所示:

module A = struct
type test = Graphics.status
end

module type ASIG = sig
type test = A.test
val atest : test
end

module Func (H : ASIG) = struct
let _ = let open H in atest.Graphics.key
end

或者如果你需要引用多个字段:
let _ = let open H in Graphics.(atest.key, atest.button)

关于OCaml - 来自类型别名的混淆(警告 40),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49819226/

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