关于函数式编程:在 OCAML 中更改相同类型

Changing identical types in OCAML

假设我有一个函数 list_fun : int_list -> string list 并且在该函数中我使用了一个我定义为模块 StringSet = Set.Make(String) ;; 的 StringSet 我尝试让函数返回 Set.elements s 并得到一个 string list 但我得到一个 这应该是相同的东西,作为 StringSet\\ 的 type t = string

你如何让 OCAML 理解这些类型的定义是相同的?在我开始使用 OCAML 标准库函数时,我遇到了几个案例。


OCaml 已经知道它们的定义相同 - 除非您正在做一些奇怪的事情来隐藏抽象中的类型,否则它会将 StringSet.elt liststring list 视为相同的类型。