SML:类型和数据类型之间的差异

时间:2013-11-06 06:30:27

标签: types sml smlnj

我是SML的新手,我想确保我真正了解基础知识。 SML中的类型和数据类型有什么区别,以及何时使用哪个?

3 个答案:

答案 0 :(得分:16)

type声明只是为现有类型指定另一个名称。声明type t = int * int只是意味着您现在可以编写t而不是int * int - 它实际上并不提供任何功能。

datatype定义允许您通过引入新的数据构造函数来创建全新的类型。数据构造函数是用于创建和模式匹配值的关键字和符号,例如列表类型nil::。这些标识符没有什么特别之处;你可以像这样轻松地定义它们:

datatype 'a list = nil | :: of 'a * 'a list

答案 1 :(得分:3)

sml中的数据类型可以有多种类型,例如

datatype a = SomeType | SomeOtherType

您可以在类型检查时使用它们,例如

fun doThings (var : a) : bool =
    case var of
       (SomeType) => true
       (SomeOtherType) => false

答案 2 :(得分:0)

您可以将其视为:type用于opaque和atomic类型,而datatype用于带有构造函数的类型,因此可以解析,主要是在表达式上的模式匹配中。

如果datatype实现了一个opaque类型(在签名中用type声明并在实现签名的结构中定义为datatype),那么int也可以公开一个简单的类型视图。

wordint这样的原子类型在某些方面可能会被视为可毁坏的类型,例如Peano对数字的算术解释,但是SML的wordreal和不太好称为{{1}},是原始类型。