我有一个定义为type abc = bool->int;;
的类型,它解释了从bool
到int
的简单映射。我的问题是,如何使用此type abc
?
例如,如果我有
type Color = Red|Green|Blue|Dark of Color|Light of Color;;
然后我可以使用Dark Red;;
type Color
之类的内容。
但现在我似乎无法使用这个新的type abc
。
答案 0 :(得分:1)
此类型abc
是bool -> int
的同义词,而不是新类型。由于它不是新类型,OCaml可能已经为您推断出类型。声明这种类型的原因是文档。
因此,对于您的问题,最好的答案是,当您想要记录某些内容的类型时,可以使用abc
。
type abc = bool -> int
let apply (f: abc) (b: bool) : int =
f b
let myfun : abc = fun b -> if b then 3 else 4
在您的其他示例中,color
是一种新类型。如果您没有声明它,它将不存在。
(请注意,OCaml中的类型名称必须以小写字母开头。您不能使用名为Color
的类型。)
<强>更新强>
您需要区分类型名称(例如color
和int
)和构造函数(例如Red
和Dark
和412)。您不能在类型名称上进行模式匹配。您可以对值进行模式匹配(例如Red
或Dark Red
或412)。您的类型abc
没有构造函数。这是一个同义词。
正如@melpomene指出的那样,对于函数值没有定义相等性也是如此。所以你无法匹配函数值。