Ocaml 记录中的显式多态类型

Ocaml 记录中的显式多态类型,ocaml,Ocaml,在OCaml中,可以在记录中定义显式多态类型 type foo = { f : 'a. unit -> 'a };; 似乎我们只能给f等赋值 { f = fun () -> failwith ""; } 或 如何在现实世界中使用此语言功能?有什么好的实践例子吗?这实际上与记录无关。如果您声明任何函数具有类型'a。unit->'a(不接受任何内容并返回调用方想要的任何内容),那么您只能将其用于不返回的函数 这里有一个稍微有用的示例:一个记录,其中包含一个用于查找(任何类型)列表长度

在OCaml中,可以在记录中定义显式多态类型

type foo = { f : 'a. unit -> 'a };;
似乎我们只能给
f
等赋值

{ f = fun () -> failwith ""; }


如何在现实世界中使用此语言功能?有什么好的实践例子吗?

这实际上与记录无关。如果您声明任何函数具有类型
'a。unit->'a
(不接受任何内容并返回调用方想要的任何内容),那么您只能将其用于不返回的函数

这里有一个稍微有用的示例:一个记录,其中包含一个用于查找(任何类型)列表长度的函数

但我们可以使用记录:

# let test foo = foo.f [1;2;3] + foo.f ["a";"b";"c"];;
val test : foo -> int = <fun>

# test foo;;
- : int = 6
#让测试foo=foo.f[1;2;3]+foo.f[“a”;“b”;“c”];;
val测试:foo->int=
#试验食品;;
-:int=6

这实际上与记录无关。如果您声明任何函数具有类型
'a。unit->'a
(不接受任何内容并返回调用方想要的任何内容),那么您只能将其用于不返回的函数

这里有一个稍微有用的示例:一个记录,其中包含一个用于查找(任何类型)列表长度的函数

但我们可以使用记录:

# let test foo = foo.f [1;2;3] + foo.f ["a";"b";"c"];;
val test : foo -> int = <fun>

# test foo;;
- : int = 6
#让测试foo=foo.f[1;2;3]+foo.f[“a”;“b”;“c”];;
val测试:foo->int=
#试验食品;;
-:int=6
# let test fn = fn [1;2;3] + fn ["a";"b";"c"];;
Error: This expression has type string but an expression was expected of type
         int
# let test foo = foo.f [1;2;3] + foo.f ["a";"b";"c"];;
val test : foo -> int = <fun>

# test foo;;
- : int = 6