如何使用函数映射的Ocaml类型?

时间:2017-01-22 02:22:46

标签: ocaml

我有一个定义为type abc = bool->int;;的类型,它解释了从boolint的简单映射。我的问题是,如何使用此type abc

例如,如果我有

type Color = Red|Green|Blue|Dark of Color|Light of Color;;

然后我可以使用Dark Red;; type Color之类的内容。 但现在我似乎无法使用这个新的type abc

1 个答案:

答案 0 :(得分:1)

此类型abcbool -> 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的类型。)

<强>更新

您需要区分类型名称(例如colorint)和构造函数(例如RedDark和412)。您不能在类型名称上进行模式匹配。您可以对值进行模式匹配(例如RedDark Red或412)。您的类型abc没有构造函数。这是一个同义词。

正如@melpomene指出的那样,对于函数值没有定义相等性也是如此。所以你无法匹配函数值。