OCaml-签名、模块和类型

OCaml-签名、模块和类型,ocaml,Ocaml,我有一个关于签名类型的基本问题。如果我有两个ocaml文件,如: istr.ml type t = int let get_string f v = f v 和fstr.ml type t = float let get_string f v = f v 还有签名 斯特里姆利 module type STR = sig type t val get_string: (t -> string) -> t -> string end 上面签名

我有一个关于签名类型的基本问题。如果我有两个ocaml文件,如:

istr.ml

type t = int

let get_string f v = f v
和fstr.ml

type t = float

let get_string f v = f v
还有签名

斯特里姆利

module type STR =
  sig

    type t

    val get_string: (t -> string) -> t -> string

  end

上面签名中的t类型是什么?它是多态的吗?

它是一种抽象类型,隐藏了实现并阻止用户直接使用它。请参阅或

但我不确定您当前的示例是否有效,因为您的代码示例似乎不在模块中。

我已经阅读了您提供的两个链接,但我仍然无法确定类型、抽象类型、签名和模块/函子是如何组合成最终产品的。在我给出的RWO链接中,这个例子非常清楚IMHO(freq&counter示例)如何隐藏一些特定的实现。对于函子,相应的章节也非常详尽(尽管我在第一次阅读时没有领会…)。也许你应该更详细地解释一下你的例子(我有点难以理解你所针对的用例),我想是时候花点时间认真研究一下这些链接和代码编辑器了,看看我是否能弄清楚它们是如何结合在一起的。我认为主要的障碍之一是抽象类型。看起来,您要寻找的是参数化模块(操作int或float),但您的目标不是隐藏实现。函子是参数化的方法。