函数签名作为OCaml中的类型

函数签名作为OCaml中的类型,ocaml,Ocaml,有没有办法申报类似的东西 type do = ('a -> 'b) 用OCaml?具体地说,对于自由类型'a和'b,'a->'b来说,将函数签名声明为类型,不是任何性能良好的OCaml函数的类型,因为它需要函数生成任意类型的值 因此,不能为具有未绑定参数的类型命名: # type uabfun = 'a -> 'b Error: Unbound type parameter 'a 如果使用特定类型,则为其命名没有问题: # type iifun = int -> int;;

有没有办法申报类似的东西

type do = ('a -> 'b)

用OCaml?具体地说,对于自由类型
'a
和'
b
'a->'b
来说,将函数签名声明为类型,不是任何性能良好的OCaml函数的类型,因为它需要函数生成任意类型的值

因此,不能为具有未绑定参数的类型命名:

# type uabfun = 'a -> 'b
Error: Unbound type parameter 'a
如果使用特定类型,则为其命名没有问题:

# type iifun = int -> int;;
type iifun = int -> int
如果类型类型
'a
'b
是参数(而不是自由),也没有问题:

# type ('a, 'b) abfun = 'a -> 'b;;
type ('a, 'b) abfun = 'a -> 'b

对于自由类型
'a
和'
b
'a->'b
不是任何性能良好的OCaml函数的类型,因为它要求函数生成任意类型的值

因此,不能为具有未绑定参数的类型命名:

# type uabfun = 'a -> 'b
Error: Unbound type parameter 'a
如果使用特定类型,则为其命名没有问题:

# type iifun = int -> int;;
type iifun = int -> int
如果类型类型
'a
'b
是参数(而不是自由),也没有问题:

# type ('a, 'b) abfun = 'a -> 'b;;
type ('a, 'b) abfun = 'a -> 'b

你到底在问什么?你会如何使用这种类型?你到底在问什么?你会如何使用这种类型?杰弗里·斯科菲尔德的回答非常好。我只想为OCaml中的variant类型添加一个参考:Jeffrey Scofield的答案非常好。我只想为OCaml中的变量类型添加一个引用: