(在 OCaml 3.12 中引入,在 4.03 中添加了简写语法)
|
表达式 fun ( type typeconstr-name ) -> expr 引入了一个名为 typeconstr-name 的类型构造器,在子表达式的范围内被认为是抽象的,但随后会被一个新的类型变量替换。请注意,与语法可能暗示的相反,表达式 fun ( type typeconstr-name ) -> expr 本身不会像常规抽象那样挂起 expr 的求值。语法已被选择以很好地适应函数声明的上下文,它通常在其中使用。可以自由地混合常规函数参数和伪类型参数,如
甚至可以使用声明函数的替代语法
如果需要引入多个局部抽象类型,可以使用语法 fun ( type typeconstr-name1 … typeconstr-namen ) -> expr 作为 fun ( type typeconstr-name1 ) -> … -> fun ( type typeconstr-namen ) -> expr 的语法糖。例如,
这种结构很有用,因为它引入的类型构造器可以在不允许使用类型变量的地方使用。例如,可以使用它在一个多态函数内的局部模块中定义异常。
这是另一个例子
它对于一等模块(参见第 12.5 节)和广义代数数据类型(GADTs:参见第 12.10 节)也极其有用。
(在 OCaml 4.00 中引入)
|
(type typeconstr-name) 语法结构本身不会使它引入的类型变量多态化,但可以在需要时与显式多态注释结合使用。以上规则作为语法糖提供,使其更容易
自动扩展为
当定义涉及 GADTs 的递归函数时,此语法非常有用,有关更详细的解释,请参见第 12.10 节。
方法定义提供了相同的功能。