在SML中,产品类 型和函数类型是类型构造函数吗?

问题描述 投票:1回答:1

在Ullman的SML书中:

我们可以从旧类型T1和T2构建新类型,如下所示。

  1. T1 * T2是“产品”类型,其值是成对的。该对中的第一个组件的类型为T1,第二个组件的类型为T2。

  2. T1-> T2是“函数”类型,其值是域类型T1和范围类型T2的函数。

  3. 我们可以通过跟随诸如T1之类的某些标识符(作为类型构造函数)来创建新类型。

    (a)列表类型构造函数。也就是说,对于每种类型T1,都有另一个类型T1列表,其值是列出所有其元素是类型为T1。

    (b)选项类型构造函数。对于每个T1类型,都有一个T1类型选项为NONE和SOME x,其中x是任何类型的值T1。

    (c)其他类型构造函数ref,数组和向量。

我想知道产品类型中的*和函数类型中的->是否被视为类型构造函数?

如果不,为什么?

谢谢。

types functional-programming programming-languages sml ml
1个回答
0
投票

不是,但这主要是出于语法原因:*->是关键字而不是标识符(在*中不使用3 * 4 = 12作为标识符是无关紧要的),我们(例如)写入int * realint -> real而不是(int, real) *(int, real) ->

但是没有理由必须这样。可以想象一个标准ML的并行世界版本,该版本允许使用中缀类型构造函数(类似于3 + 4表示op+ (3, 4)的方式),并且仅将*->定义为内置类型构造函数(类似于refarrayvector)。

事实上,即使在我们自己的宇宙中,我们也可以写:

type ('a, 'b) pair = 'a * 'b
type ('a, 'b) function = 'a -> 'b

创建类型构造函数pairfunction,使得(int, real) pairint * real同义,并且(int, real) functionint -> real同义。 (不是任何人want那个。)

© www.soinside.com 2019 - 2024. All rights reserved.