在 OCaml 中更改相同类型
假设我有一个函数 list_fun : int_list ->字符串列表
,在该函数中,我使用定义为模块StringSet = Set.Make(String)
的StringSet
。我尝试让函数返回 Set.elements s
并获取 string list
但我得到了一个 StringSet.elt list
,它应该是与 StringSet
的 type t = string
是同一件事。
如何让 OCaml 理解这些类型的定义相同?当我开始使用 OCaml 标准库函数时,我有几个遇到过这个问题的情况。
Suppose I have a function list_fun : int_list -> string list
and in that function I use a StringSet
that I define as module StringSet = Set.Make(String)
. I try to have the function return Set.elements s
and get a string list
but instead I get a StringSet.elt list
which is supposed to be the same thing, as the StringSet
's type t = string
How do you make OCaml understand that these types are identically defined? I have several cases where I have come across this issue as I have started using the OCaml standard library functions.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
OCaml 已经知道它们的定义相同 - 除非您做了一些奇怪的事情来隐藏抽象背后的类型,否则它将把
StringSet.elt 列表
和string 列表
视为相同类型。OCaml already knows that they are identically defined - unless you're doing something strange to hide the types behind an abstraction, it will treat a
StringSet.elt list
andstring list
as the same type.