在OCaml中声明参数化类型

时间:2018-02-27 16:15:20

标签: types ocaml

在OCaml中假设给出了一种类型:

('a myTypeA) myTypeB

如果类型x的值为'a myTypeA myTypeB,是否存在特定于OCaml的内置,以获取类型y的值'a myTypeA(基本上是对...进行解构输入并删除myTypeB)?

我正在寻找带签名的功能:

val deconstruct : 'a myTypeA myTypeB -> 'a myTypeA

1 个答案:

答案 0 :(得分:0)

你不能,除非你能看到myTypeB的定义,以及原因:

没有什么可以阻止您创建以下类型:

type 'a t = int (* here 'a is called a "phantom type" *)
type 'a u = unit -> 'a (* the type of functions that return an 'a *)

现在,没有办法提取" 'a值"包含"。这是因为类型参数并不总是"包含的值的类型"但是可以表示各种不同的东西(在第一个例子中,什么都没有)。

如果这似乎有限制,请注意即使在容器的情况下,您也可能不希望允许deconstruct函数存在。如果您开始使用monads,可以了解更多相关信息。