OCaml 语法 : what does type 'a t mean?

标签 ocaml

这是关于 OCaml 中的类型定义,我发现以下语法令人费解:

type 'a t

在简单的英语中是什么意思?

最佳答案

由于 OP 有 C++ 语言的经验,我认为以下解释可能有用。形式的类型声明:

type 'a t
接近C++
template <typename a> class t;
例如,'a list是一个通用列表,'a是元素的一种类型。为简洁起见,我们使用单个 ' , 而不是 template <typename _>构造。在 OCaml 的说法中,我们使用术语“参数多态性”,而不是“泛型编程”。我们说的是类型构造函数,而不是单词模板。后者有一个有趣的结果。就像在 C++ 中模板实例化创建类型的新实例一样,在 OCaml 中,协调多态类型的类型变量会创建新类型,例如 int list , float list (参见,list<int>float<list>)。因此,可以查看类型构造函数 'a list作为类型级别的一元函数,它接受一个类型并创建一个类型。可以有 nary 类型的构造函数,例如 type ('key, 'value) hashtbl是一个二进制类型构造函数,它为给定的 key 创建一个类型和 value一对。此外,我们可以将非参数类型视为空类型构造函数,因此 int构造类型 int .
附言F# 语言,OCaml 的后代,允许以两种形式编写:int tt<int>附言为了防止可能的混淆,我想声明,尽管模板和参数类型试图解决相同的问题,但它们仍然存在一些差异。模板在实例化之后键入,参数类型在之前。所以参数类型'a t为所有 'a 定义.如果你想创建一个类型变量没有被普遍量化的类型,你可以使用另一种机制——仿函数。它们也非常接近模板,但它们接受类型加类型要求,这是 C++ 术语中的一个概念。这些概念在 OCaml 中的模块类型中被具体化,因此仿函数实际上是模块级别的函数,因为它接受一个模块并产生一个模块。

关于OCaml 语法 : what does type 'a t mean?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36974203/

相关文章:

OCaml `Map.Make` 输入模块

class - 如何使用类声明将一流模块解压缩为对象模块?

list - 在OCaml中,为什么Core的List.find中有辅助功能?

functional-programming - 为什么 OCaml List.fold_right 没有实现为尾递归?

c++ - 如何获取 OCaml 链接器标志以与 C++ cmake 构建链接

ocaml - OCaml 4.01.0 中缺少 Option.default

OCaml "else"语法错误

ocaml - 有没有办法在 OCaml 中参数化类型上的模块或从模块中转义类型?

haskell - 简单发电机

set - OCaml 中的异构集